ele*_*nso 27 javascript angularjs angularjs-directive
我写了一个angularjs指令.在这个指令的模板中,我添加了一个ngIf指令,在其中我显示了一个绑定到我的指令范围的输入.
<div ng-if="bool"><input ng-model="foo"></div>
Run Code Online (Sandbox Code Playgroud)
我注意到,经过大量的试验和错误后,ngIf指令导致模型在输入文本更改时无法更新.如果我将其更改为ngShow,一切都按预期工作.
我正在寻找这种差异的解释
dim*_*irc 29
这是因为ngIf创建了一个新的子范围,所以如果你想绑定到与其他输入相同的范围,我们可以用$ parent向下一级.请在此处了解有关范围继承的更多信息
angular.module('testApp', [])
.directive('testDir', function () {
return {
restrict: 'A',
template: '<input ng-model="foo"><input ng-model="foo">' +
'<div ng-if="bool"><input ng-model="$parent.foo"></div>',
link: function (scope, elem, attrs) {
scope.foo = "bar";
scope.bool = true;
}
}
});
Run Code Online (Sandbox Code Playgroud)
看看新的jsfiddle
Ila*_*mer 20
发生这种情况是因为您在作用域上使用了基元.
ngIf 创建一个新的子范围,它会遮蔽父范围的值.
<div ng-if="bool"><input ng-model="data.foo"></div>
Run Code Online (Sandbox Code Playgroud)
范围继承通常很简单,你通常甚至不需要知道它正在发生......直到你尝试双向数据绑定(即表单元素,ng-模型)到一个原语(例如,数字,字符串, boolean)在子范围内从父范围定义.
它不像大多数人期望的那样工作.会发生什么是子范围获取其自己的属性,该属性隐藏/隐藏同名的父属性.这不是AngularJS正在做的事情 - 这就是JavaScript原型继承的工作原理.
新的AngularJS开发人员通常没有意识到ng-repeat,ng-switch,ng-view和ng-include都会创建新的子范围,因此在涉及这些指令时经常会出现问题.
| 归档时间: |
|
| 查看次数: |
19343 次 |
| 最近记录: |