使用ui-router在控制器之间共享数据

时间:2014-11-25 19:25:42

标签: angularjs angular-ui-router

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

3 个答案:

答案 0 :(得分:3)

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

  1. 将数据放在共同的祖先$scope上,以便所讨论的所有控制器都能看到本地范围内的数据。
  2. 使用全球服务(如您所说)。
  3. 创建一个"本地服务" (使用resolve配置)在共同的祖先状态。
  4. 将数据传递为$stateParams(仅在某些特定情况下有用)。
  5. 第一个通常是最好的选择,因为将数据放在$scope上也可以让您轻松$watch更改。

答案 1 :(得分:0)

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

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'));

答案 2 :(得分:0)

您可以使用以下路线:

.state('parent', {
  url: "/parent",
  abstract: true,
  controller: 'ParentCtrl'
})

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

FooCtrl访问ParentCtrl

中的功能和数据
相关问题