【问题标题】:How to access parent scope variables inside ui.route - onEnter method?如何访问 ui.route - onEnter 方法中的父范围变量?
【发布时间】:2016-01-22 15:32:05
【问题描述】:

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

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

我试过了

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

但它给出了一个错误

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

【问题讨论】:

  • 你想使用父状态范围变量吗?
  • 是的,我想使用父范围变量

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


【解决方案1】:

根据您对变量的使用,我认为您可能可以做各种事情。

如果您想更改它,您可以在较低范围内使用 $scope.$emit('eventName', {someData}) 和在父范围内使用 $on('eventName', someFunction) 使用从较低到较高范围的消息传递,并在您的函数中进行更改。

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

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

希望对你有帮助

【讨论】:

  • 谢谢。我尽量避免使用 rootscope。目前正在按照您所说的事件进行处理。我想更改父范围中的对象。所以它工作正常。
【解决方案2】:

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

【讨论】:

猜你喜欢
  • 2022-08-16
  • 1970-01-01
  • 2012-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-05
相关资源
最近更新 更多