2

如何从工厂的 run 方法中访问 vars?

(function()
{
    'use strict';

    angular.module('services',[])
    .factory('Hello',function()
    {
        var data;
    })
    .run(function()
    {
        //Get access to data var here
    });
}());

这可能是不可能的,我将不得不转移var data;到工厂功能之外,对吧?(例如http://plnkr.co/edit/1sHvg0oy0Y6o20SKrTnb

4

2 回答 2

3

您可以将工厂注入到模块的.run函数中:

myApp.factory('Hello', function () {
    var data;
    return {
        getData: function () {
            return data;
        },
        setData: function (val) {
            data = val;
        }
    };    
});
myApp.run(function (Hello) {
    Hello.setData(2);
});

这是一个小提琴:http: //jsfiddle.net/xph8n/

或者这里有一个似乎更接近您需求的解决方案。它使用更通用的提供程序,该提供程序返回一个getData()函数,同时保持私有setData().config然后可以使用传入的关联提供程序调用私有函数:

myApp.provider('Hello', function () {

    this.data = 0;
    this.$get = function () {
        var data = this.data;
        return {
            getData: function () {
                return data;
            }
        }
    };  
    this.setData = function (data) {
        this.data = data;
    };
});

myApp.config(function (HelloProvider) {
    HelloProvider.setData(1);
});

这个小提琴:http: //jsfiddle.net/xph8n/3/

于 2013-11-12T18:06:47.777 回答
2

有可能,但您的结构不正确

(function()
{
    'use strict';

    angular.module('services',[])
    .factory('Hello',function()
    {
        var data;
        return data;
    })
    .run(function(Hello)
    {
        //Hello points to the service variable.
    });
}());
于 2013-11-12T15:35:44.343 回答