Answers:
您需要在父作用域中使用一个对象(不是原始对象),然后就可以直接从子作用域中更新它
上级:
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/
还有另一种方法可以执行此任务并且不使用$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';
});