在视图/控制器之间共享范围

时间:2014-10-09 08:29:10

标签: angularjs algorithm

我的问题更多的是算法而不是代码。

让我们解释一下我的想法:

我有一个树形视图,其中包含我可以订购的元素。当我双击其中一个元素时,我希望页面切换到一个表单,填充所单击元素的信息。当我保存表单时,它会返回树视图,修改元素。

我是怎么做到的?

我的主视图treeView及其控制器treeViewController。我有一个加载元素的工厂。

//treeViewController
$scope = factory.getelement()
//whatever else I need

我试图有另一种观点" fullEdit"我希望它完全分享范围(它也可以共享它实际上并不相同的控制器)。 这意味着我在" fullEdit"中修改$ scope.element。它在树上修改过。

问题是,当控制器加载示波器时,每次切换视图时我都会重新加载 范围。

我尝试过具有嵌套状态的ui-router(我不认为这是解决方案)。许多人建议多视图来获得我想要的东西,但是我已经尝试过了,我得到的只是同一页面上的两个视图,这不是我想要的。此外,似乎这两种观点仍然是独立的。

此外,使用全球范围似乎不是一个好的解决方案。

编辑/实际上我的问题是当我更改视图时控制器被执行,因此范围从后端重新加载。我不想要那个,我想分享$ scope,但每次更改视图时都不会重新加载它!

1 个答案:

答案 0 :(得分:1)



angular.module('myApp', [])
  .controller('myCtrlOne', function myCtrlOne($scope, reusableData) {
    $scope.service = reusableData
  })
  .controller('myCtrlTwo', function myCtrlOne($scope, reusableData) {
    $scope.service = reusableData
  })
  .service('reusableData', function() {
    return {
      message: 'initial msg'
    }
  })

<!DOCTYPE html>
<html ng-app="myApp">

<head>
  <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.26/angular.min.js"></script>
</head>

<body>
  <div ng-controller="myCtrlOne">
    <input type="text" ng-model="service.message">
  </div>
  <hr>
  <div ng-controller="myCtrlTwo">
    <input type="text" ng-model="service.message">
  </div>
</body>

</html>
&#13;
&#13;
&#13;

如果你运行这个片段(上帝我有这个功能),你会在不同的控制器中看到两个输入,它们通过服务共享数据,只要页面没有重新加载服务(这是简单的 - 一个每次运行的实例)将保留您的更改