如何在Angularjs的所有范围内提供数据

时间:2015-06-06 16:35:57

标签: javascript html angularjs angularjs-scope angularjs-service

我希望使用$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页面上打印。请有人帮忙吗?感谢

2 个答案:

答案 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文档以更好地了解异步行为