我希望使用$http
从服务器端获取数据,并将其提供给我应用中的所有路由和控制器。
Javascript代码示例
myApp.factory('menuService', function($http){
$http.get('/pages').success(function(data){
return data; //list of pages
});
});
myApp.run(function($rootScope, menuService){
$rootScope.menu = menuService;
});
HTML code sample
<ul >
<li ng-repeat="page in menu">{{page.title}}</li>
</ul>
此代码实际返回数据,但不会在我的html页面上打印。请有人帮忙吗?感谢
答案 0 :(得分:3)
您正在反转不同的承诺模式。
相反,您的代码应为:
myApp.factory('menuService', function($http){
return $http.get('/pages');
});
myApp.run(function($rootScope, menuService){
menuService.then(function(data) {
$rootScope.menu = data;
})
});
答案 1 :(得分:2)
您可以从设置menuService
有点不同中受益。请尝试以下方法......
myApp.factory('menuService', function($http) {
function getData() {
return $http.get('/pages');
}
return {
'getData' : getData
}
});
现在我们在$http
函数的getData()
调用中包含了一个函数,我们现在可以轻松利用then()
来解析getData()
在{.run()
中返回的承诺1}},确保我们获得一个已解析的值,并为$rootScope.menu
分配我们想要的值。 menuService
上的这个新设置现在设置了以后添加其他功能的格局,这是我们可能想要的。
myApp.run(function($rootScope, menuService) {
menuService.getData().then(function(response) {
$rootScope.menu = response;
})
});
查看$http文档以更好地了解异步行为