如何在ui.route - onEnter方法中访问父范围变量?

时间:2016-01-22 15:32:06

标签: javascript angularjs angular-ui-router angular-ui

我使用带角度ui路线的angularjs。在父状态控制器中,我定义了范围变量dataset

如何在子状态onEnter方法中访问父状态范围。

我试过这个

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

但它给出了错误

  

错误:[$ injector:unpr]未知提供者:$ scopeProvider< - $ scope

2 个答案:

答案 0 :(得分:1)

取决于你对变量的使用,我认为你可以做各种各样的事情。

如果你想改变它,你可以使用$ scope。$ emit(' eventName',{someData})在较低范围内使用从Lower到Upper范围的消息传递,以及$ on(&#39 ; eventName',someFunction)在父范围内,并在你的函数中进行更改。

但是如果您正在尝试读取变量,您可以在父级中使用$ rootScope定义该变量并在其他地方使用它,或者在服务中定义它然后调用服务并在需要时操作数据。

除了这些之外,您可以使用第一种方式(消息传递)更进一步,并使用$ broadcast将另一条消息从父范围发送给子节点,并将其中的变量发送到内部使用$ on读取儿童范围......我不知道它是否是一个非常优化的解决方案!

希望有用

答案 1 :(得分:0)

在UI-Router中,应使用解析来加载应用程序主数据。 Resolve可以传播到子状态,对管理生命周期很有用;它们在进入状态时加载,在状态退出时消失。您可以在父状态上创建解析并将其注入父视图(子控制器)和/或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