2016-01-22 62 views
1

我使用angularjs與角度ui路由。在父狀態控制器中,我定義了範圍變量dataset如何訪問ui.route中的父範圍變量 - onEnter方法?

如何訪問子狀態onEnter方法內的父狀態範圍。

我想這

.state('business.remove', { 
    url: '/remove', 
    onEnter: [...'$scope',..., 
     function (...$scope,...) { 
       ... 
       $scope.$parent.dataset 

但它給出了一個錯誤

Error: [$injector:unpr] Unknown provider: $scopeProvider <- $scope

+0

你想使用父狀態範圍變量? –

+0

是的,我想使用父範圍變量 –

回答

1

取決於你使用的變量,我想你也許能夠做各種事情。如果你想改變它,你可以使用$ scope在$ scope($ event('eventName',{someData})和$ on('eventName',someFunction)家長的範圍,並做你的功能的變化。

但是,如果您要讀取變量,您可以在父項中使用$ rootScope定義該變量並在其他地方使用它,或者在服務中定義它,然後在需要時調用服務並操作您的數據。

除此之外,您可以使用第一種方式(消息傳遞)進一步發送消息,並使用$ broadcast將其他消息從父範圍發送到子代,並使用$ broadcast將該變量發送到內部讀取$ on孩子的範圍...芽我不知道這是一個非常優化的解決方案!

希望有幫助

+1

謝謝。我儘量避免使用鼻腔鏡。目前正在按照事件講述的方式進行工作。我想改變父範圍中的對象。所以它工作正常。 –

0

在UI-Router中,應該使用resolves加載應用程序的主數據。解決方案可以傳播到子狀態,對管理生命週期很有用;它們在進入狀態時加載並在狀態退出時消失。您可以在父狀態上創建一個解析並將其注入到父視圖或子視圖(控制器)和/或onEnter/onExit鉤子中。

.state('business', { 
url: '/remove', 
resolve: { 
    dataset: function(someService) { 
     someService.fetchDataset(); 
    } 
}, 
controller: function(dataset, $scope) { 
    // do something with dataset 
} 

.state('business.remove', { 
url: '/remove', 
onEnter: function (dataset) { 
    // do something else with dataset 
+0

你有一個工作的例子嗎?我試過了,但是'onEnter'的'Unknown provider'失敗了。 – Gaim

+0

爲了將來的參考,我在這裏找到了一個:http://plnkr.co/edit/a7slXklU5BQc61BVbbk1?p=preview – Gaim