2013-09-23 29 views
3

我一直试图使用ngCookie在我的应用程序中存储和检索cookie。由于我无法设置使用ngCookie创建的Cookie的路径或到期时间,因此我不得不寻找别处。如何在Angular服务中使用jQuery.cookie插件

所以我试图用这个jQuery cookie plugin

但是,我不知道如何使它在角度服务中可用。围绕如何在控制器和服务中提供jQuery插件,答案一致指向使用指令,但我不认为这是正确的方法,因为cookie是控制器和服务应该注意的东西。

那么,有人会为Angular服务提供一个jQuery插件?

+0

你在正确的轨道上;指令是针对DOM操作的,这显然不是。如果你已经走过这么远,为什么不花时间学习编写cookie并建立你自己的cookie服务? –

+1

主要是因为我已经超过了我的截止日期,因为ngCookies的缺点,并且我非常渴望得到这个工作如果我今晚有任何睡眠的希望。 – gargantuan

回答

5

您可以封装在一个工厂jQuery的cookie的API会暴露出这样一些方法:

angular.module('MyApp', []); 

angular.module('MyApp').factory('CookieFactory', function(){ 

    return { 
     getCookie: function(name){ 
      return $.cookie(name); 
     }, 

     getAllCookies: function(){ 
      return $.cookie(); 
     }, 

     setCookie: function(name, value){ 
      return $.cookie(name, value); 
     }, 

     deleteCookie: function(name){ 
      return $.removeCookie(name); 
     } 
    } 
}); 

但我们可以想像easyli要当你的cookie值做一些事情。怎么样通过AngularJS的API承诺回调。

所以我们的工厂就变成了:

angular.module('MyApp').controller('CookieCtrl', function(CookieFactory) { 

    CookieFactory.getCookie('mycookie').then(function(value){ 
     //do that you want 
    }); 

}); 

工作plunkr这里:

angular.module('MyApp', []); 

angular.module('MyApp').factory('CookieFactory', function($q, $timeout){ 

    return { 
     getCookie: function(name){ 
      var deferred = $q.defer(); 

      $timeout(function() { 
       deferred.resolve($.cookie(name)); 
      }, 0); 

      return deferred.promise; 
     }, 

     getAllCookies: function(){ 
      return $.cookie(); 
     }, 

     setCookie: function(name, value){ 
      return $.cookie(name, value); 
     }, 

     deleteCookie: function(name){ 
      return $.removeCookie(name); 
     } 
    } 
}); 

然后你就可以在你的控制器一样,用它http://plnkr.co/edit/6KoUtp?p=preview

2

我认为这是一个您希望使用服务而不是指令的实例。通常,在处理修改DOM元素的jQuery插件时会使用指令。

它看起来像这样。

angular.module('app', []).service('myCookieService', function(){ 
    return { 
     cookie: $.cookie, 
     removeCookie: $.removeCookie 
    } 
}); 

当然,话虽如此,你可以从你的应用程序的任何地方调用jQuery插件。

相关问题