2016-07-24 1 views
1

ui-routerとcontrollerAsの構文を使用して子状態に親状態の関数を渡す方法を知りたいので、親。ControllerAs構文を使用して親状態関数を呼び出すには、角度ui-router子状態が必要です

リストをクリックすると、リストをクリックすると、子ステートの詳細をロードします。子を更新すると、親ステートの関数を使用してリストを更新/更新します。

私はここでそれについてplunkrを作った: https://plnkr.co/edit/rRkibROTrXhkFSCuzcSb?p=preview

.state('home.users', { 
url: '/users', 
templateUrl: 'users.html', 
controller: function() { 
    this.users = [ 
    { id: 1, name: 'User1'}, 
    { id: 2, name: 'User2'}, 
    { id: 3, name: 'User3'}]; 

    this.lastUpdated = new Date(); 
    this.updateList= function() { 
    this.lastUpdated = new Date(); 
    } 
}, 
controllerAs: 'usersVm' }) 

.state('home.users.details', { 
url: '/:id', 
templateUrl: 'usersdetails.html', 
controller: function() { 
    this.user = { id: 1, name: 'Users1' }; 
    this.update = function() { 
    // update parent scope list here 
    // usersVm.updateList(); 
    // $scope.$parent.usersVm.updateList() 
    } 
}, 
controllerAs: 'usersDetailsVm' 

});

エラーが表示される場合は:Home.users.details.1をクリックし、[保存]をクリックします。保存ボタンを親リストを更新する親関数を呼びたいと思います。私はどこでも$スコープを使わずに動作させることができませんでした(私は避けようとしています)。

私はこの間違ったことを考えていますか?私は別の方法でそれをしなければならない?

ありがとうございました。

答えて

0

この文脈で$ scopeを使用しても問題ありません。私が間違っていなければ、親の関数は$ scope.parentに格納されるべきです。

しかし、あなたはそれを酷使するべきではありません。また、これらの更新を処理するサービスを作成することもできます。

+0

$ scope(と$ scope。$ parent)を使用するように設定されていますが、どちらの状態間でもリストを共有するためにサービスをどのように使用するのかはわかりません(つまり、子状態はリストを更新し、親スコープはそのリストは$ digestで更新されますか?) – wanderinghealer

+0

サービスはリストを保存し、それを更新して取得する機能を持っています。両方のコントローラでDIを使用すると、このサービスが組み込まれます。 –

+0

ありがとうございます! – wanderinghealer

関連する問題