在我的routeProvider中,我使用resolve
选项(user
)来获取用户数据:
// route.js
$routeProvider
.when('/view', {
templateUrl: 'home.html',
controller: 'ViewController',
resolve: {
user: getUser // some promise that resolves a user object
}
});
<body ng-app="app">
<nav ng-controller="NavController"></nav>
<main ng-view="">
{{user | json}}
</main>
</body>
当我将user
传递给路径控制器时,这很好用。
但是,<nav>
html会抛出错误,我认为因为它不在ng-view
标记内
// Controller.js
angular.module('Controllers', [])
.controller('NavController', ['$scope', 'user', function($scope, user){
$scope.user = user; // broken!
})
.controller('ViewController', ['$scope', 'user', function($scope, user){
$scope.user = user; // works!
});
错误:[$ injector:unpr]未知提供者:userProvider&lt; - user&lt; - NavController
有没有人知道我可以将解析后的数据(user
)导入“外部”控制器的方式,例如导航,
答案 0 :(得分:2)
您可以按照以下内容执行评论帖子的人所建议的内容:
$routeProvider
.when('/view', {
templateUrl: 'home.html',
controller: 'ParentController',
resolve: {
user: function(UserService){
return UserService.getUser();
}
}
});
您的控制器将类似于:
angular.module('Controllers', [])
.controller('ParentController', ['$scope', 'user', function($scope, user){
$scope.user = user;
}])
.controller('NavController', ['$scope', function($scope){
$scope.user = $scope.user; // now works!
}])
.controller('ViewController', ['$scope', function($scope){
$scope.user = $scope.user; // works!
}]);
最后你的控制器将被称为:
<div ng-controller="ParentController">
<div ng-controller="NavController"></div>
<div ng-controller="ViewController"></div>
</div>
但是,我不建议这样做。 NavController和ViewController都继承了ParentController的范围,因此,没有什么可以阻止你改变user的值,因为它在树中继承。将此用户对象提取到NavController和ViewController都可以访问的服务中要好得多。
希望这有帮助!
答案 1 :(得分:0)
这是不可能的,可能的是将数据解析为包含用户数据的数据服务,然后您可以使用您选择的任何控制器中的服务来访问数据。