获取解析变量并传递给控制器

时间:2016-09-15 07:00:33

标签: angularjs angularjs-scope

您好我创建了一个名为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>

enter image description here

下面是一个jsfiddle,但我对如何使用它并不熟悉,但基本结构包含在这里 https://jsfiddle.net/bd06cctd/1/

2 个答案:

答案 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}}属性。
  •   

- AngularJS $routeProvider API Reference

答案 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