AngularJS控制器无法注入解析器

时间:2018-01-05 22:23:12

标签: angularjs controller

请参阅此fiddle

我想将解析器注入AngularJS控制器但不能正常工作。错误消息为Unknown provider: urlParasProvider <- urlParas <- MyController

任何建议,谢谢!

function config($routeProvider){
  $routeProvider
    .when('/abc',{
        controller: 'MyController',
        resolve: {
            urlParas : function(){
                // return $location.absUrl();
                return 'abc';
            }
        }
      })
      .otherwise({
        controller: 'MyController',
        resolve: {

            urlParas : function(){
                // return $location.absUrl();
                return 'abc';
            }

        }
      });
}

myApp.$inject = ['$scope','urlParas']; 

1 个答案:

答案 0 :(得分:0)

您收到错误是因为控制器正由ng-controller指令实例化:

ERRONEOUS
  <body ng-controller="MyController">
    <h1>Hello Plunker!</h1>
    <h3>{{text}}</h3>
  </body>

ng-controller指令无权访问解析程序本地人。

$compile服务实例化ng-controller指令及其控制器,而不考虑路由表。

来自文档:

  

$compile DDO属性 - controller

     

控制器构造函数。 控制器在预链接阶段之前被实例化,并且可以被其他指令访问(请参阅require属性)。这允许指令彼此通信并增强彼此的行为。

     

控制器是可注射的(并支持括号表示法),具有以下本地:

     
      
  • $scope - 与元素相关的当前范围
  •   
  • $element - 当前元素
  •   
  • $attrs - 元素的当前属性对象
  •   
  • $transclude - 预先绑定到正确的转换范围的转换链接功能
  •   
     

— AngularJS $compile Service Comprehensive Directive API - controller

  

谢谢!我试图删除ng-controller =“MyController”但没有工作,

将模板放在路线定义中:

$routeProvider
.when('/abc',{
    controller: 'MyController',
    template: `
        <h1>Hello Plunker!</h1>
        <h3>{{text}}</h3>
    `,
    resolve: {
        urlParas : function(){
            // return $location.absUrl();
            return 'abc';
        }
    }
  })

使用ng-view directive

实例化它
  <body   ̶n̶g̶-̶c̶o̶n̶t̶r̶o̶l̶l̶e̶r̶=̶"̶M̶y̶C̶o̶n̶t̶r̶o̶l̶l̶e̶r̶"̶ >
    <ng-view>
    </ng-view>
  </body>

ng-view指令使用路由表来提供适当的模板和适当的控制器。它调用解析器函数并将它们作为本地注入到指定的控制器中。

来自文档:

  

$route.current.locals

     

$controller服务用于控制器实例化的本地地图。 locals包含resolve地图的已解析值。此外,locals还包含:

     
      
  • $scope - 当前路线范围。

  •   
  • $template - 当前路线模板HTML。

  •   
     

locals将分配给路径范围的$resolve属性。您可以使用路由定义中的resolveAs覆盖属性名称。

     

— AngularJS ngRoute $route API Reference - current property

控制器

app.controller('MyController', MyController);

MyController.$inject = ['$scope','urlParas']; 

function MyController($scope,urlParas){

  $scope.text = 'Sophia';

}