2016-07-24 71 views
1

我想知道如何將父狀態的函數傳遞給使用ui-router和controllerAs語法的孩子,所以我可以調用一個函數家長。需要角ui路由器的子狀態使用controllerAs語法調用父狀態函數

一個例子是我有一個列表的視圖,當我點擊列表時,它加載子狀態的詳細信息,在更新孩子時,使用父狀態上的函數更新/刷新列表。

我做了一個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,單擊保存。我希望保存按鈕調用更新父列表的父功能。如果不在任何地方使用$ scope,我都無法實現它(我試圖避免這種情況)。

我在想這個錯嗎?我應該以另一種方式去做嗎?

謝謝。

回答

0

在這種情況下使用$ scope可能沒問題。如果我沒有弄錯,父母函數應該存儲在$ scope.parent中。

但是你不應該過度使用它。或者,您可以創建處理這些更新的服務。

+0

提示使用$ scope(和$ scope。$ parent),我不確定我將如何使用服務在兩種狀態之間共享列表(即;子狀態將更新列表並且父範圍綁定到該列表並獲得更新$摘要?)? – wanderinghealer

+0

服務將存儲該列表,並具有更新它並獲取它的功能。在兩個控制器中使用DI,您將包含此服務。 –

+0

謝謝,會這樣做! – wanderinghealer

相關問題