在AngularJS中返回JSON时使用Resolve显示模板

时间:2013-05-22 13:15:32

标签: angularjs angularjs-scope

我有一个被点击的URL,控制器的模型是来自API调用的数据。目前,在渲染模板时,数据还没有回来,所以我得到一个空白页。

我调查并且显然Resolve是采取的方法,但我没有太多运气。以下是我的内容,但我对Angular很新,所以这可能完全是错误的方法。

//app.js    
(function () {
    'use strict';

    var app = angular.module('barbato', []).
           config(function ($routeProvider) {
               $routeProvider.
                   when('/', {
                       controller: 'ReposController',
                       templateUrl: '/Content/templates/repos.html',
                       resolve: {
                           myVar: function(repoService) {
                               return repoService.getItems();
                           }
                       }
                   }).
                   otherwise({ redirectTo: '/' });
           });

    app.factory('repoService', function ($http) {

        return {
            getItems: function () {
                $http.get('http://localhost:12008/getrepodata/jchannon').then(function (response) {
                    return response.data;
                });
            },
        };
    });

})();




//repo.js    
(function () {
    'use strict';

    var app = angular.module('barbato');

    var repooController = app.controller(
        'ReposController', ['$scope','myVar', function ($scope, myVar) {
            $scope.items = myVar;
        }
    ]);

})();

3 个答案:

答案 0 :(得分:2)

您应该对代码进行一些修改

resolve: {
            myVar: function (repoService) {
                return repoService.getItems().then(function (response) {
                    return response.data;
                });
            }
        }


app.factory('repoService', function ($http) {
    return {
        getItems: function () {
            return $http.get('http://localhost:12008/getrepodata/jchannon');
        }
    };
});

答案 1 :(得分:1)

今天我花了太多时间试图找出如何让它发挥作用。我找到了this thread in the angularjs group并重新设计了Pawel Kozlowski提供的示例。

基本上,诀窍是在resolve函数中使用匿名工厂方法。否则,我想你可以将函数注入控制器

Here's the plnkr

答案 2 :(得分:0)

使用resolve时,需要返回promise对象。视图等待承诺解决。更改你的getItems函数如下。

app.factory('repoService', function ($http) {
    return {
        getItems: function () {
            var p = $http.get('http://localhost:12008/getrepodata/jchannon');
            p.then(function (response) {
                return response.data;
            });
            return p;
        }
    };
});