2014-10-09 85 views
0

我有一个问题是更多的算法比代码。共享范围之间的视图/控制器

让我们解释什么,我想:

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

我是如何试图做到这一点的?

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

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

我已经试过有另一种观点认为“fullEdit”我希望它共享的范围,完全(也可以分享它不会母校实际上是相同的控制器)。 这意味着当我修改其在树中修改的“fullEdit”中的$ scope.element时。

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

我试过用嵌套状态的ui路由器(我不认为这是解决方案)。许多人建议多视图来获得我想要的,但是我已经尝试过了,我得到的所有视图都在同一页面上显示,这不是我想要的。此外,这两种观点似乎仍然是独立的。

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

编辑/其实我的问题是,当我改变视图控制器被执行,因此范围从后端重新加载。我不希望这样,我想分享$ scope,但不会每次更改视图时重新加载它!

回答

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>

如果你运行这段代码(上帝,我lvoe此功能),你会看到两个输入每个不同的控制器内,他们通过服务共享数据,只要网页不刷新该服务(这是简单的 - 每次运行一个实例)将保持您的更改

+0

这似乎是一个好方法。我只需要隐藏/取消隐藏其中一个div。这是我原本打算使用Jquery完成的,但它更好地分享范围。谢谢,我今晚会尝试。 – Eagle1 2014-10-09 08:58:04

+0

该服务将跨视图共享数据,您可以使用单独的控制器,然后注入服务,这就是它 – maurycy 2014-10-09 08:58:43

+0

服务,而不是工厂? – Eagle1 2014-10-09 09:33:02

相关问题