我有一个AngularJS服务,我想用一些异步数据进行初始化.像这样的东西:
myModule.service('MyService', function($http) {
var myData = null;
$http.get('data.json').success(function (data) {
myData = data;
});
return {
setData: function (data) {
myData = data;
},
doStuff: function () {
return myData.getSomeData();
}
};
});
Run Code Online (Sandbox Code Playgroud)
显然这不会起作用,因为如果某些东西doStuff()在myData返回之前尝试调用,我将得到一个空指针异常.据我所知,从这里和这里提出的其他一些问题,我有几个选择,但没有一个看起来很干净(也许我错过了一些东西):
使用"运行"设置服务
设置我的应用时,请执行以下操作:
myApp.run(function ($http, MyService) {
$http.get('data.json').success(function (data) {
MyService.setData(data);
});
});
Run Code Online (Sandbox Code Playgroud)
然后我的服务看起来像这样:
myModule.service('MyService', function() {
var myData = null;
return {
setData: function (data) {
myData = data;
},
doStuff: function () {
return myData.getSomeData();
} …Run Code Online (Sandbox Code Playgroud)