2016-10-26 3 views
0

$ stateParamsを必要とする子状態でいくつかの変数を初期化しようとしています。私は、以下の使用状態を登録したことについては

$stateProvider 
    .state('parent', { 
     abstract: true, 
     url: '/parent', 
     template: '<div ui-view></div>', 
     controller: 'ParentCtrl', 
    }).state('parent.child', { 
     url: '/:id', 
     templateUrl: 'template.html', 
     controller: function ($scope) { 
      $scope.someFunction(); 
     }, 
    }); 

これは私のコントローラである:

module.controller('ParentCtrl', [ 
    '$scope', '$stateParams', 
    function ($scope, $stateParams) { 
     //calling a function in the scope inherited from parent controller 
     $scope.someFunction = function() { 
      //$stateParams isn't available. 
     } 
    }]); 

しかしsomeFunctionは$ stateParams内のparamsと呼ばれたときに定義されていません。

しかし、その代わりにParentCtrlから関数を呼び出すの私はこのような状態コントローラ内から実行する場合:

$stateProvider 
    .state('parent', { 
     abstract: true, 
     url: '/parent', 
     template: '<div ui-view></div>', 
     controller: 'ParentCtrl', 
    }) 
    .state('parent.child', { 
     url: '/:id', 
     templateUrl: 'template.html', 
     controller: function ($scope, $stateParams) { 
      //$stateParams is available 
     }, 
    }); 

私は$ stateParams上のparamsにアクセスすることができます。

誰かが私の理由を説明できますか?

+0

@RadimKöhler多分、私は$ stateParamsが$ scope継承にどのように関連していたのでしょうか?私の疑問は、$ stateParamsより前に子コントローラによって呼び出された関数がparamsで生成されるという事実に関係しているからです。しかし、私は同じ子コントローラの中でparamsを使うことができます。 – belyid

+0

親ルートにアクセスしようとしていますか?この[SO post](http://stackoverflow.com/questions/28663146/stateparams-in-url-of-abstract-state-ui-router-angularjs)で説明したように、親コントローラで$ stateParamsを得ることができます。解決で私は[plunkrを作成しました](http://plnkr.co/edit/vqovhyezWkIUMJGHlZ2j?p=preview)親コントローラを含むようにこれを拡張しました - [ここ](http://plnkr.co/edit/vqovhyezWkIUMJGHlZ2j?p=preview )、親コントローラのstateParamsに問題なくアクセスできます。あなたは何かを見落としている。 – Mahesh

答えて

0

私はそれを持っています。実際には本当にシンプルです:問題は、親状態$ stateParamsを使用する親状態コントローラ内の関数を子状態から呼び出すことです(もちろん、正しいパラメータを持たないことです)。

だから、それを動作させるために、私はこのような親コントローラに子状態のparamsを注入する必要があります:

$stateProvider 
.state('parent', { 
    abstract: true, 
    url: '/parent', 
    template: '<div ui-view></div>', 
    controller: 'ParentCtrl', 
}).state('parent.child', { 
    url: '/:id', 
    templateUrl: 'template.html', 
    controller: function ($scope, $stateParams) { 
     $scope.someFunction($stateParams); 
    }, 
}); 

それがこの結論に私を導くマヘシュコメントに答えるために始めていました。

関連する問題