AngularJS中ngModel指令的范围是什么
What is the scope of ngModel directive in AngularJS?
我认为ngModel指令不应该创建新的作用域,因为它需要更改父作用域的变量
如果我错了,请纠正我
此外,还查看ngModel指令的源作用域未定义,因此不应为指令创建新的作用域
var ngModelDirective = ['$rootScope', function($rootScope) {
return {
restrict: 'A',
require: ['ngModel', '^?form', '^?ngModelOptions'],
controller: NgModelController,
// Prelink needs to run before any input directive
// so that we can set the NgModelOptions in NgModelController
// before anyone else uses it.
priority: 1,
compile: function ngModelCompile(element) {
// Setup initial state of the control
element.addClass(PRISTINE_CLASS).addClass(UNTOUCHED_CLASS).addClass(VALID_CLASS);
return {
pre: function ngModelPreLink(scope, element, attr, ctrls) {
var modelCtrl = ctrls[0],
formCtrl = ctrls[1] || modelCtrl.$$parentForm;
modelCtrl.$$setOptions(ctrls[2] && ctrls[2].$options);
// notify others, especially parent forms
formCtrl.$addControl(modelCtrl);
attr.$observe('name', function(newValue) {
if (modelCtrl.$name !== newValue) {
modelCtrl.$$parentForm.$$renameControl(modelCtrl, newValue);
}
});
scope.$on('$destroy', function() {
modelCtrl.$$parentForm.$removeControl(modelCtrl);
});
},
post: function ngModelPostLink(scope, element, attr, ctrls) {
var modelCtrl = ctrls[0];
if (modelCtrl.$options && modelCtrl.$options.updateOn) {
element.on(modelCtrl.$options.updateOn, function(ev) {
modelCtrl.$$debounceViewValueCommit(ev && ev.type);
});
}
element.on('blur', function() {
if (modelCtrl.$touched) return;
if ($rootScope.$$phase) {
scope.$evalAsync(modelCtrl.$setTouched);
} else {
scope.$apply(modelCtrl.$setTouched);
}
});
}
};
}
};
}];
我也不明白为什么ngModel指令需要ngModel本身
需要:['ngModel','^?form','^'?ngModelOptions']难道不能忽略它并像
那样编写吗需要:['^?form','^?ngModelOptions']
如果没有,请解释原因?
ngModel不会创建一个独立的作用域。ngModel被列在require数组中的原因是,它的控制器(NgModelController)将被注入到链接函数中。请注意传递到ngModelPostLink函数中的ctrls参数。由于ngModel列在数组中,ctrls[0]将是NgModelController的一个实例。ctrls[1]是表单控制器等。
相关文章:
- ES6是否引入了一种机制来生成块范围的函数语句(而不是表达式)
- 为什么IIFE的这个变量指的是全局范围
- 为什么不是't这=>边界“;这个“;到周围的范围
- 访问内部功能范围的元素,而不是敲除中的外部
- 角承诺的“then”函数的成功回调的词汇范围是什么?
- 我可以设置这个吗'某事'在该服务中动态创建的嵌套对象中的服务?(可能是范围问题)
- 在全球范围内强制ng严格di,而不仅仅是在ng应用程序级别上
- 在日期范围内查找丢失日期的最有效方法是什么
- 谷歌应用程序脚本:;范围不是函数,它是对象;尝试在单元格中放置注释时出错
- HTML5范围滑块值在使用jQuery(而不是UI)的过程中
- 具有固定最小值的jQuery UI滑块:显示最小范围,而不是最小绝对值
- 当生成正态分布的随机值时,定义范围的最有效方法是什么
- 什么是JavaScript日期范围
- 短范围命名空间数组是什么意思
- 这种减少if语句中声明的变量范围的模式是一种好的做法吗
- (文档).ready是一个全局范围
- 在全局范围内执行文件,而不是返回导出的对象
- RxJS的新手,范围不是一个函数
- 迭代器范围不是本地的
- 全局变量在函数范围内是未定义的