3 回答
TA贡献1859条经验 获得超6个赞
使您的指令以比ngModel更高的优先级运行,并为孤立的作用域更正模型绑定。在高优先级模板操作(例如ngRepeat)之后,但在默认值0(ngModel使用的默认值)之后,我选择了与输入指令相同级别的优先级“ 100”。
这是示例代码:
myDirective = function() {
return {
compile: function(tElement, tAttrs, transclude) {
// Correct ngModel for isolate scope
if (tAttrs.ngModel) {
tAttrs.$set('model', tAttrs.ngModel, false);
tAttrs.$set('ngModel', 'model', false);
}
return {
post: function(scope, iElement, iAttrs, controller) {
// Optionally hook up formatters and parsers
controller.$formatters.push(function(value) {
// ...
})
// Render
return controller.$render = function() {
if (!controller.$viewValue) {
return;
}
angular.extend(scope, controller.$viewValue);
};
}
};
},
priority: 100,
require: '^ngModel',
scope: {
model: '='
},
};
}
在编译期间,伪指令检查ngModel属性是否存在。该检查使用Angular的Attributes对归一化值进行处理。如果存在该属性,则将其替换为“ model”(不是“ ngModel”),这是数据绑定到我们隔离区中的名称。但是,我们还必须创建一个属性,以便Angular可以为我们执行数据绑定。可以使用一个false使DOM保持不变的参数(可以选择)修改这两个属性。
- 3 回答
- 0 关注
- 619 浏览
添加回答
举报