使用路径的解析数据进行角度注入

时间:2016-03-21 05:08:10

标签: javascript angularjs

在我的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)导入“外部”控制器的方式,例如导航,

2 个答案:

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

这是不可能的,可能的是将数据解析为包含用户数据的数据服务,然后您可以使用您选择的任何控制器中的服务来访问数据。