我有这样的ui路由器状态:
$stateProvider.state('parent', {
templateUrl: 'tpl/a.html',
resolve: {
resA: function() {
return { 'value': 'A' };
}
},
controller: function($scope, resA) {
$scope.resA = resA.value;
}
});
在模板html中我使用另一个控制器(子控制器)。这个子控制器需要解决ui路由器状态的依赖性。但是,它并没有注入儿童控制器。
TPL / a.html
<h1>Hello</h1>
<div ng-controller="ChildCtrl">
</div>
ChildCtrl
var app = angular.module('app', []);
app.controller('ChildCtrl', function($scope, resA) {
// some codes
});
我收到错误,在ChildCtrl中resA unkonwn。如何在ChildCtrl中注入resA?
答案 0 :(得分:2)
我看到3个选项:
1)将值放在父控制器的$ scope
中 //it would be available in child controller in `$scope.a`
$stateProvider.state('parent', {
templateUrl: 'tpl/a.html',
resolve: {
resA: function() {
return { 'value': 'A' };
}
},
controller: function($scope, resA) {
$scope.resA = resA.value;
}
})
.state('parent.child', {
templateUrl: 'tpl/child.html',
controller: function($scope) {
console.log($scope.resA) //'{value: "A"}'
}
});
2)将子控制器作为子路由的控制器,并在那里解析resA
var a = { 'value': 'A' };
$stateProvider.state('parent', {
templateUrl: 'tpl/a.html',
resolve: {
resA: function() {
return a;
}
},
controller: function($scope, resA) {
$scope.resA = resA.value;
}
})
.state('parent.child', {
templateUrl: 'tpl/child.html',
resolve: {
resA: function() {
return a;
}
},
controller: function($scope, resA) {
$scope.resA = resA.value;
}
});
3)制作一些服务,为控制器提供数据(现在存储在resA中)并将其注入两个控制器
答案 1 :(得分:0)
结账@BotanMan的回答。
另一种方式,类似于3.答案。
将您的资源投入服务。
var app = angular.module('app');
app.service('resA', function() {
// your service here
});
包括它:
$stateProvider.state('parent', {
templateUrl: 'tpl/a.html',
resolve: {
resA: 'resA' //your service name
},
controller: function($scope, resA) {
$scope.resA = resA.value;
}
});
因此,您可以像预期的那样使用该资源:
var app = angular.module('app', []);
app.controller('ChildCtrl', function($scope, resA) { //now it should work
// some codes
});
请参阅解析时的docs。