如何在Angular服务中使用jQuery.cookie插件

如何在Angular服务中使用jQuery.cookie插件,jquery,angularjs,angular-services,Jquery,Angularjs,Angular Services,我一直在尝试使用ngCookie在我的应用程序中存储和检索cookie。因为我无法设置使用ngCookie创建的cookie的路径或过期时间,所以我不得不去别处寻找 所以我尝试用这个 然而,我不知道如何在角度服务中使用它。关于如何使jQuery插件在控制器和服务中可用,答案一致指向使用指令,但我认为在这种情况下这不是正确的方法,因为Cookie是控制器和服务应该知道的 那么,如何使jQuery插件可用于Angular服务呢?我认为这是一个您希望使用服务而不是指令的实例。通常,在处理修改DOM元素

我一直在尝试使用
ngCookie
在我的应用程序中存储和检索cookie。因为我无法设置使用
ngCookie
创建的cookie的路径或过期时间,所以我不得不去别处寻找

所以我尝试用这个

然而,我不知道如何在角度服务中使用它。关于如何使jQuery插件在控制器和服务中可用,答案一致指向使用指令,但我认为在这种情况下这不是正确的方法,因为Cookie是控制器和服务应该知道的


那么,如何使jQuery插件可用于Angular服务呢?

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

它看起来像这样

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

当然,话虽如此,您可以从应用程序中的任何位置调用jQuery插件。

您可以在工厂中封装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);
        }
    }
});
但是我们可以想象,当你得到cookie值时,你想做些什么。通过AngularJS的API承诺进行回调怎么样

因此,我们的工厂变成:

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);
        }
    }
});
然后您可以在控制器中使用它,如下所示:

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

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

});

在这里工作:

你走在正确的轨道上;指令用于DOM操作,而这显然不是。如果你已经走了这么远,为什么不花点时间学习编写cookie并建立自己的cookie服务呢?主要是因为我已经过了最后期限,因为ngCookies的缺点,如果我今晚有希望睡觉的话,我非常想让它起作用。