jam*_*uir 14 javascript service load angularjs
我在填充到我的视图中的服务中获取数据时遇到问题.我有一个如此定义的服务
app.factory('nukeService', function($rootScope, $http) {
var nukeService = {};
nukeService.nuke = {};
//Gets the list of nuclear weapons
nukeService.getNukes = function() {
$http.get('nukes/nukes.json')
.success(function(data) {
nukeService.nukes = data;
});
return nukeService.nukes;
};
return nukeService;
});
Run Code Online (Sandbox Code Playgroud)
和我的控制器
function NavigationCtrl($scope, $http, nukeService){
/*$http.get('nukes/nukes.json').success(function(data) {
$scope.nukes = data;
});*/
$scope.nukes = nukeService.getNukes();
}
Run Code Online (Sandbox Code Playgroud)
如果我使用来自控制器的$ http.get数据填充正常,但是,如果我尝试从服务中调用数据,我什么也得不到.我知道查询是异步的,但是我很难理解在返回数据后如何填充$ scope变量.我可以使用$ rootscope来广播一个事件并在控制器中监听它,但这似乎不是完成此任务的正确方法.我真的很感激有关如何以正确的方式做到这一点的任何建议.
Aru*_*hny 28
我认为这应该可以解决你的问题
app.factory('nukeService', function($rootScope, $http) {
var nukeService = {};
nukeService.data = {};
//Gets the list of nuclear weapons
nukeService.getNukes = function() {
$http.get('nukes/nukes.json')
.success(function(data) {
nukeService.data.nukes = data;
});
return nukeService.data;
};
return nukeService;
});
function NavigationCtrl($scope, $http, nukeService){
$scope.data = nukeService.getNukes();
//then refer to nukes list as `data.nukes`
}
Run Code Online (Sandbox Code Playgroud)
这是对象引用的问题.
当您调用时,nukeService.getNukes()您正在获取对象的引用,a那么您的变量将$scope.nukes引用该内存位置.
在设置远程服务器调用之后,nukeService.nukes = data;您没有更改对象,a而是nukeService.nukes从引用对象更改a为对象b.但你$scope.nukes不知道这个重新分配,它仍然指向对象a.
在这种情况下,我的解决方案是传递一个a带有属性的对象,data然后只更改数据属性而不是更改引用a
这应该如下.正如NickWiggill的评论所提到的,如果我们不返回promise,undefined将被分配给nukeService.data.
app.factory('nukeService', function($rootScope, $http) {
var nukeService = {};
//Gets the list of nuclear weapons
nukeService.getNukes = function() {
return $http.get('nukes/nukes.json');
};
return nukeService;
});
function NavigationCtrl($scope, $http, nukeService){
nukeService.getNukes().then(function(response){
$scope.data = response.data;
});
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
36533 次 |
| 最近记录: |