更新父范围变量的角度

我有两个控制器一个包裹在另一个。 现在我知道子范围从父范围继承属性,但有没有办法更新父范围变量? 到目前为止,我还没有遇到任何明显的解决方案。

在我的情况下,我在表格中有一个日历控制器。 我想从父作用域(这是表单)更新开始日期和结束日期,以便表单在提交时具有开始日期和结束日期。


您需要在父范围中使用对象(不是基元),然后您将能够直接从子范围更新它

家长:

app.controller('ctrlParent',function($scope){
    $scope.parentprimitive = "someprimitive";
    $scope.parentobj = {};
    $scope.parentobj.parentproperty = "someproperty";
});

儿童:

app.controller('ctrlChild',function($scope){
    $scope.parentprimitive = "this will NOT modify the parent"; //new child scope variable
    $scope.parentobj.parentproperty = "this WILL modify the parent";
});

工作演示 :http://jsfiddle.net/sh0ber/xxNxj/

请参阅AngularJS中范围原型/原型继承的细微差别?


还有一种方法可以完成这个任务,并且不使用$scope.$parent变量。

只需准备一个方法来更改父范围中的值并在子范围中使用它。 喜欢这个:

app.controller('ctrlParent',function($scope) {
  $scope.simpleValue = 'x';
  $scope.changeSimpleValue = function(newVal) {
    $scope.simpleValue = newVal;
  };
});

app.controller('ctrlChild',function($scope){
    $scope.changeSimpleValue('y');
});

它也可以工作,并让您更好地控制价值变化。

然后,您甚至可以通过HTML调用该方法,例如: <a ng-click="changeSimpleValue('y')" href="#">click me!</a>


这也适用(但不确定这是否遵循最佳实践)

app.controller('ctrlParent',function($scope) {
    $scope.simpleValue = 'x';
});

app.controller('ctrlChild',function($scope){
    $scope.$parent.simpleValue = 'y';
});
链接地址: http://www.djcxy.com/p/77809.html

上一篇: Update parent scope variable in angular

下一篇: Why do we use $rootScope.$broadcast in AngularJS?