如何在其运行方法中从工厂访问变量?
(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)
答案 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);
});
答案 1 :(得分:2)
可能但您的结构不正确
(function()
{
'use strict';
angular.module('services',[])
.factory('Hello',function()
{
var data;
return data;
})
.run(function(Hello)
{
//Hello points to the service variable.
});
}());