3

ngCookieアプリで Cookie を保存および取得するために使用しようとしています。で作成された Cookie のパスまたは有効期限を設定できないため、ngCookie他の場所を探す必要がありました。

だから私はこのjQuery cookie pluginを使用しようとしています。

ただし、Angular サービスで使用できるようにする方法がわかりません。コントローラーとサービスで jQuery プラグインを使用できるようにする方法について調べてみると、答えは満場一致でディレクティブを使用することを指していますが、Cookie はコントローラーとサービスが認識すべきものであるため、この場合は正しいアプローチではないと思います。

では、Angular サービスで jQuery プラグインを利用できるようにするにはどうすればよいでしょうか?

4

2 に答える 2

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);
        }
    }
});

しかし、クッキーの値を取得したときに何かをしたいと思うことは容易に想像できます。AngularJS の API promise によるコールバックはどうでしょうか。

したがって、私たちの工場は次のようになります。

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
    });

});

plunkr の作業はこちら : http://plnkr.co/edit/6KoUtp?p=preview

于 2013-09-23T19:14:54.030 に答える
2

これは、ディレクティブの代わりにサービスを使用したい場合の 1 つの例だと思います。通常、ディレクティブは、DOM 要素を変更する jQuery プラグインを扱うときに使用されます。

このようになります。

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

もちろん、アプリのどこからでも jQuery プラグインを呼び出すことができます。

于 2013-09-23T19:03:17.330 に答える