我有一个被点击的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;
}
]);
})();
答案 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函数中使用匿名工厂方法。否则,我想你可以将函数注入控制器
答案 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;
}
};
});