Mal*_*001 113 javascript angularjs angularjs-scope
我有两个控制器,一个包裹在另一个.现在我知道子范围从父范围继承属性,但有没有办法更新父范围变量?到目前为止,我没有遇到任何明显的解决方案.
在我的情况下,我在表单中有一个日历控制器.我想从父作用域(即表单)更新开始日期和结束日期,以便表单在提交时具有开始日期和结束日期.
Dan*_*Dan 190
您需要在父作用域中使用对象(而不是基元),然后您才能直接从子作用域更新它
家长:
app.controller('ctrlParent',function($scope){
$scope.parentprimitive = "someprimitive";
$scope.parentobj = {};
$scope.parentobj.parentproperty = "someproperty";
});
Run Code Online (Sandbox Code Playgroud)
儿童:
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";
});
Run Code Online (Sandbox Code Playgroud)
工作演示:http://jsfiddle.net/sh0ber/xxNxj/
请参阅AngularJS中范围原型/原型继承的细微差别是什么?
Rav*_*ker 116
还有一种方法可以执行此任务并且不使用该$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');
});
Run Code Online (Sandbox Code Playgroud)
它也有效,让您可以更好地控制价值变化.
您甚至可以在HTML中调用该方法,如:<a ng-click="changeSimpleValue('y')" href="#">click me!</a>.
小智 5
这也有效(但不确定这是否遵循最佳实践)
app.controller('ctrlParent',function($scope) {
$scope.simpleValue = 'x';
});
app.controller('ctrlChild',function($scope){
$scope.$parent.simpleValue = 'y';
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
78980 次 |
| 最近记录: |