为什么格式化程序不适用于隔离范围?这个有角度的错误还是我做错了什么?
这包含隔离范围,不起作用:http://jsfiddle.net/YbdXQ/56/
restrict: 'A',
scope:{},
link: function(scope, elm, attrs, ctrl) {
ctrl.$formatters.unshift(function(modelValue) {
console.log("In formatters" + modelValue);
return $filter('date')(modelValue);
});
这不包含隔离和范围工作正常:http://jsfiddle.net/YbdXQ/57/
restrict: 'A',
link: function(scope, elm, attrs, ctrl) {
ctrl.$formatters.unshift(function(modelValue) {
console.log("In formatters" + modelValue);
return $filter('date')(modelValue);
});
答案 0 :(得分:6)
这与格式化程序没有任何关系,而是ngModel
不再能够访问您尝试传递它的值。当您创建隔离范围时,myDate
指令不再可用ngModel
(因为您创建了一个新的范围 - 隔离范围 - 没有{{1} }} 在上面)。作为证据,这里有not-so-useful example根据传递给myDate
属性的内容设置myDate
范围:http://jsfiddle.net/YbdXQ/78/
angular/angular.js#1069,“一个指令的隔离范围隔离了同一元素上的其他指令”,讨论了这个问题:
例如,请注意我的自定义指令如何阻止ng-model工作
您可能也对this StackOverflow question, "ngModel and component with isolated scope"感兴趣。