【问题标题】:Sharing data between controllers with ui-router [closed]使用 ui-router 在控制器之间共享数据 [关闭]
【发布时间】:2014-11-25 19:25:42
【问题描述】:

除了创建工厂或服务之外,还有其他方法吗?

【问题讨论】:

标签: angularjs angular-ui-router


【解决方案1】:

有几种方法可以在状态控制器之间共享数据:

  1. 将数据放在共同祖先的$scope 上,这样所有有问题的控制器都可以在其本地范围内看到数据。
  2. 使用全球服务(如您所说)。
  3. 在共同祖先的状态下创建“本地服务”(使用 resolve 配置)。
  4. 将数据作为$stateParams 传递(仅在某些非常特殊的情况下有用)。

第一个通常是最好的选择,因为将数据放在$scope 上也可以让您轻松$watch 进行更改。

【讨论】:

  • 谢谢,我意识到我必须创建一个服务
【解决方案2】:

嗯,这可能不是最好的,但它在我开发的应用程序中非常适合我,诀窍是使用本地存储,例如在我的搜索视图中:

controller: 'SearchCtrl'
state: 'search'

我从 Web 服务获取结果列表并将它们存储如下:

localStorage.setItem('results', angular.toJson(results)); // assuming a json response

然后我共同转换到另一个状态$state.transitionTo('results')

controller: 'ResultCtrl'
state: 'results'

最后从localStarage的范围变量ResultCtrl中得到结果:

$scope.results = angular.fromJson(localStorage.getItem('results'));

【讨论】:

    【解决方案3】:

    你可以有这样的路线:

    .state('parent', {
      url: "/parent",
      abstract: true,
      controller: 'ParentCtrl'
    })
    
    .state('app.foo', {
      url: "/foo",
      views: {
        'menuContent' :{
          templateUrl: "templates/foo.html",
          controller: 'FooCtrl'
        }
      }
    })
    

    并从FooCtrl访问ParentCtrl中的函数和数据

    【讨论】:

    • 这对我不起作用。
    • 可以发plnkr.co吗?
    猜你喜欢
    • 2015-06-04
    • 2015-12-15
    • 2014-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-28
    • 2016-11-30
    • 1970-01-01
    相关资源
    最近更新 更多