您好我创建了一个名为billerModel的模型和一个具有billers变量的解析路线。现在我想在我的控制器中检索并分配这个变量,但是我得到了这个billerData未知提供程序错误。以下是我的路线代码:
app.config(["$routeProvider", "$httpProvider",'$locationProvider',function($routeProvider, $httpProvider, $locationProvider) {
$routeProvider
.when("/billers", {
templateUrl: 'admin/billers/index.html',
controller: 'billerController',
resolve: {
billerData: function(billerModel) {
return billerModel.getData();
}
}
});
以下是我的模型代码
app.factory('billerModel', ['$http', '$cookies', function($http, $cookies) {
return {
getData: function() {
return $http({
method: 'GET',
url: 'billers'
});
}
}
}]);
下面是我的控制器代码,它给出了错误
app.controller('billerController', ['$scope', 'billerData',
function($scope, billerData){
$scope.billers = billerData;
}]);
我也尝试从我的视图中删除ng-controller但是如果我这样做,那么我得到一个未知变量的错误
<div style="text-align: left;" ng-controller="billerController">
{{ billers }}
</div>
下面是一个jsfiddle,但我对如何使用它并不熟悉,但基本结构包含在这里 https://jsfiddle.net/bd06cctd/1/
答案 0 :(得分:2)
解析.when
块中的数据只能注入.when
块定义的控制器。由ng-controller
指令注入的子控制器无法注入解析数据。
此外,如果您在billerController
阻止模板中.when
阻止 ng-controller
指令中注入.when
,则控制器将实例化两次。
$routeProvider
还可以在$resolve
属性的视图范围内提供解析数据。由ng-controller
指令实例化的子控制器可以使用它。
app.controller('childController', ['$scope',
function($scope){
$scope.billers = $scope.$resolve.billerData;
}]);
ng-controller
指令实例化的控制器将通过视图范围内的原型继承找到$resolve
属性。
来自文档:
- resolve -
{Object.<string, Function>=}
- 应该注入控制器的可选依赖关系图。如果这些依赖项中的任何一个是promise,路由器将等待它们全部被解析或者在实例化控制器之前被拒绝。如果成功解析了所有promise,则会注入已解析的promise的值,并触发$routeChangeSuccess
事件。如果任何承诺被拒绝,则$routeChangeError
事件被触发。为了更轻松地从模板访问已解析的依赖项,解析映射将在路由范围内,$resolve
(默认情况下)或{{{ 1}}属性。
答案 1 :(得分:0)
你可以尝试改变:
app.factory('billerModel', ['$http', '$cookies', function($http, $cookies) {
return {
getData: function() {
return $http({
method: 'GET',
url: 'billers'
});
}
}
}]);
到
app.factory('billerModel', ['$http', '$cookies', function($http, $cookies) {
return {
getData: $http({
method: 'GET',
url: 'billers'
});
}
}]);
您将返回匿名函数,而不是Promise