Angular JS将子范围variables传播给父范围
我怎么可以采取变化的变化,并轻松地传播他们回到ParentCtrl,尽pipe一个'新'var在ChildCtrl实例化? 最小到无$和$ watch的加分(使其更容易实现)
ParentCtrl
-
ChildCtrl / ChildCtrl2 / ChildCtrl3 / ChildCtrl4
- 视图
我的ChildCtrl只是不同的地方,我不能很容易地抽象主布局和ng视图,但他们都依赖于ParentCtrl相同的function。
$ scope.searchTerms在ParentCtrl中定义,但是ng-model ='searchTerms'的input框在子控制器的视图中。 当这个var改变它不会反映在ParentCtrl只有ChildCtrls。
例如: http : //jsfiddle.net/JHwxP/22/
HTML部分
<div ng-app> <div ng-controller="Parent"> parentX = {{x}} <br/> parentY = {{y}}<br/> <div ng-controller="Child"> childX = {{x}}<br/> childY = {{y}}<br/> <a ng-click="modifyBothScopes()">modifyBothScopes</a><br> <br> The changes here need to appear in 'Parent'. <input ng-model='y'> </div> </div> </div>
控制器
function Parent($scope) { $scope.x= 5; $scope.y= 5; } function Child($scope) { $scope.modifyBothScopes= function() { $scope.$parent.x++; }; }
UPDATE
我目前正在尝试共享服务的方法: https : //gist.github.com/exclsr/3595424
UPDATE
尝试发射/广播系统
已解决的问题:我在父级中存储$ scope.searchTerms,当更改时在$ scope范围内创build了一个空间。
解决scheme:我应该在父项中完成$ scope.search.terms,当在子项中进行更改时,将会向父项发起冒泡。
例如: http : //jsfiddle.net/JHwxP/23/
这是由于原型inheritance是如何工作的。
当您在子控制器中要求$scope.x
时,它会检查是否在其作用域上定义了x,如果不是,则在父作用域中查找x。
如果您分配给子范围的x
属性,它只会修改子范围。
处理这个问题并获得共享行为的简单方法是使用对象或数组。
function ParentCtrl($scope) { $scope.model = {x: 5, y: 5}; } function ChildCtrl($scope) { $scope.update = function(x, y) { $scope.model.x = x; $scope.model.y = y; }; }
在这里,这两个范围内的变化都是可见的,因为$scope.model
将在父级和子级范围内引用相同的对象。
John Lindquist有一个关于这个的video 。
另一个不涉及创build一系列通过引用传递的对象的解决scheme是在父控制器中创buildsetter函数。
function ParentCtrl($scope) { $scope.x = 5; $scope.y = 5; $scope.setX = function(value) { $scope.x = value; } $scope.setY = function(value) { $scope.y = value; } } function ChildCtrl($scope) { $scope.update = function(x, y) { $scope.setX(x); $scope.setY(y); }; }
如果将数据作为同一对象的一部分可能是没有意义的,我发现这样更清晰。
你也可以发疯,在孩子身上做这样的事情:
function ChildCtrl($scope) { var superSetX = $scope.setX; $scope.setX = function(value) { superSetX(value * 2); }; ... }
我正在寻找这样的东西。 第一个解决scheme是在读完这个之后 。 您可以与子控制器共享父级模型。
这是一个例子 。 我甚至使用一系列的项目来certificate我的观点。 ChildController正在改变他的父母,就像他们都是同一个宇宙的一部分。