有没有办法从ui.router将变量传递给控制器​​?

dom*_*kun 4 javascript angularjs angular-ui-router

我有一个带有一些嵌套视图的页面,使用ui.router和我希望将一些数据从父控制器传递给子控制器,而不会将无用的服务注入到子控制器中.

在我看来,像这样的东西是完美的

        state('home', {
            url: "/home",
            templateUrl: "parts/home.html",
            controller: "FatherController"
        }).
        state('home.child', {
            url: "/child",
            templateUrl: "parts/home/child.html",
            controller: "ChildController",
            params: {$scope.data = $rootScope.someData}
        })
Run Code Online (Sandbox Code Playgroud)


你碰巧知道是否有办法做到这一点?

Jos*_*ber 11

如果子视图嵌套在父视图中,则子控制器将自动继承父作用域.

您应该能够直接从子控制器访问父控制器的数据.

  • 地狱啊,它就在那里!我将使用`$ scope.$ parent`然后,谢谢! (4认同)
  • @domokun您的控制器应该从父​​控制器继承.尝试从子控制器中记录`$ scope.$ parent`. (2认同)

vpe*_*ron 6

好吧,我猜你并不总是可以选择将数据移动到父控制器等.

我对此的建议是使用解析器(https://github.com/angular-ui/ui-router/wiki#resolve)来做一些魔术.

以下是如何使其工作的示例:

var dataResolver = ['$scope', '$stateParams', 'Service',
    function($scope, $stateParams, Service) {
        Service.get($stateParams.objectId).then( function(obj) {
            $scope.myObject = obj;
            return obj;
        });
     };
 ];

 $stateProvider.state("foo.details", {
     "url": '/foo/:objectId', 
     "resolve": { "data": dataResolver },
     "controller": "SomeController",
     "template": "<ui-view />"
 )
Run Code Online (Sandbox Code Playgroud)

当控制器实例化时,你会神奇地获得$ scope.obj数据,无论如何.