在run()方法中从工厂访问变量

时间:2013-11-12 15:28:58

标签: angularjs factory

如何在其运行方法中从工厂访问变量?

(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

2 个答案:

答案 0 :(得分: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/

答案 1 :(得分:2)

可能但您的结构不正确

(function()
{
    'use strict';

    angular.module('services',[])
    .factory('Hello',function()
    {
        var data;
        return data;
    })
    .run(function(Hello)
    {
        //Hello points to the service variable.
    });
}());