在控制器之间共享AngularJS工厂

时间:2015-03-03 16:06:16

标签: angularjs

我有两个控制器和一个工厂,我在两个控制器中使用了一些实用功能。其中一个实用程序函数会检查缓存($cacheFactory)是否存在某些值,无论如何都无法使其工作。

应用

angular.module('sfmiet', ['sfmiet.autocomplete', 'sfmiet.httpservice', 'sfmiet.utilservice']);

厂:

angular.module('sfmiet.utilservice', [])
    .factory('utilservice', ['$cacheFactory',  function($cacheFactory) {

        return function(cacheName) {

            this.cache = $cacheFactory.get(cacheName);

            this.init = function(cacheName) {
                this.cache = $cacheFactory.get(cacheName);
            };

            this.isActiveStep = function(step) {
                return (this.cache.get('step') == step);    
            };
        };
}]);

控制器1:

angular.module('sfmiet').controller('sftestCtrl', function($scope, $cacheFactory, utilservice) {

    $scope.util = new utilservice('stateCache');    
    console.log($scope.util);

    //some more stuff...
});

控制器2:

angular.module('sfmiet').controller('sfmietCtrl', function($scope, $timeout, $http, $cacheFactory, autocomplete, httpservice, utilservice) {

    $scope.util = new utilservice('stateCache');
    console.log($scope.util);

    //some more stuff...
});
控制器的

日志$scope.util.cache为第二个提供了第二个但是 undefined 的对象。不使用new关键字会为第一个控制器完全 undefined 留下$scope.util,而第二个控制器再次正常。只有一个控制器一切正常,但只要我把第二个控制器带进去,它就会停止工作。

也许我在这里遗漏了一些东西,但我看不出这种行为的原因。过去3个小时一直在网上搜索,既然我现在已经结束了,我希望你们有人能给我一个戳。非常感谢!

1 个答案:

答案 0 :(得分:1)

根据documentation,如果缓存不存在,则$cacheFactory.get会返回undefined

最可能的原因是在您的第一个控制器之后和第二个控制器之前创建了stateCache