Angular使用服务变量

时间:2014-09-09 15:48:25

标签: javascript angularjs

我已将服务注入指令,有没有办法可以在指令中共享服务中的数据

就好像我有一个名为resultsDirective的指令一样,已经注入了一些名为dataService的服务(随着时间的推移,这些服务正在进行中)。有没有办法可以从指令中的服务访问变量?为了实现一些目的:

angular.module("someModule").service("dataService", function() {
    var shareVariable;
})

angular.module("someModule").directive("resultsDirective" , ["dataService", function(dataService) {
    return {
        restrict: ,
        scope: ,
        link: function() {}

        //sorry about the lack of implementation here, just made something skeletal
    }
}])

所以,如果我只想console.log shareVariable resultsDirective,我将如何访问该数据?我相信Angular有一个简单的方法吗?

2 个答案:

答案 0 :(得分:0)

这不是一个有角度的问题,这是一个javascript问题。您无法访问范围外的本地范围变量。您必须通过执行类似

的操作来公开sharedVariable
angular.module("someModule").service("dataService", function() {
    this.shareVariable = null;
});


(function () {

    var app = angular.module('myApp', []);

    app.service("dataService", function () {
        this.shareVariable = 'shohel';
    });

    app.directive("resultsDirective", ["dataService", function (dataService) {
        return {
            restrict: 'E',
            scope: {},
            link: function (scope, ele, att) {
                var svc = dataService.shareVariable;
            }
        };

    }]);
})();

答案 1 :(得分:0)

首先,请记住服务是一种单身,因此修改服务中的变量将对您的所有应用程序产生影响。你遇到的问题是你不知道关闭是什么,我建议你看一下JS Closure

如何解决这个问题?两个选项:

  • 使用属性返回一个对象(不推荐,可能会弄乱)
  • 制作getter / setter功能

代码示例

var myModule = angular.module('myModule' []);
myModule.factoy('service', function () {
    var myVariable;

    return {
        getMyVariable: function () { return myVariable; },
        setMyVariable: function (newVal) { myVariable = newVal; }
    }
});

实际上你可以做更多事情,但我不知道你需要什么

此外,您的服务无效,请查看:Creating Services - AngularJS