请参阅此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'];
答案 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';
}
}
})
实例化它
<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
覆盖属性名称。
app.controller('MyController', MyController);
MyController.$inject = ['$scope','urlParas'];
function MyController($scope,urlParas){
$scope.text = 'Sophia';
}