2

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

我调查并显然解决是采取的方法,但我没有太多运气。以下是我所拥有的,但我对 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;
        }
    ]);

})();
4

3 回答 3

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');
        }
    };
});
于 2013-05-22T13:34:57.120 回答
1

我今天花了太多时间试图弄清楚如何让它发挥作用。我在 angularjs 组中找到了这个线程,并重新编写了 Pawel Kozlowski 提供的示例。

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

这是plnkr

于 2013-05-22T13:38:17.783 回答
0

使用 resolves 时,您需要返回 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;
        }
    };
});
于 2015-12-07T07:35:51.850 回答