【发布时间】:2015-08-27 12:34:18
【问题描述】:
我正在尝试了解 ng-if 和范围。据我所知, ng-if 创建了一个新的子范围。这是我的问题:
查看
<input ng-model="someValue1" />
<div ng-if="!someCondition">
<input ng-model="$parent.someValue2" />
</div>
控制器
$scope.someCondition = true;
if ($scope.someCondition) {
$scope.someValue2 = $scope.someValue1;
}
如果 someCondition 设置为 true,那么 someValue2 应该与 someValue1 相同。
我的问题是在这两种情况下(真或假)我都无法访问 someValue2。我怎样才能做到这一点?
【问题讨论】:
-
在 Angular 中,您绝不能直接修改 $parent 属性值。但是,您可以修改 $parent 属性的属性,否则会破坏继承。做:
$parent.someValue.num = 10,不要:$parent.someValue = 10 -
此声明不以任何方式备份。修改
$parent属性似乎工作得很好。最顶部的“已在此处回答”问题的答案解释了修改$parent属性是如何工作的,即使有一些可视化,它清楚地表明它是有效的。一个问题是,当添加更多条件和ng-ifs 或创建其他一些子作用域时,$parents 的链可能会更长,并且代码会中断,这与使用对象时不同。实际上,使用这些对象时甚至不需要$parent,只需使用$scope:$scope.someValue.num = 10。