5

为什么格式化程序不适用于隔离范围?这是角度错误还是我做错了什么?

这包含隔离范围并且不起作用: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);
     });
4

1 回答 1

6

这与格式化程序没有任何关系,而是ngModel不再有权访问您尝试传递它的值的事实。当您创建隔离范围时,指令myDate不再可用ngModel(因为您创建了一个新范围 - 一个隔离范围 - 没有myDate它)。作为证明,这是一个不太有用的示例myDate,它根据传递给ngModel属性的内容设置范围:http: //jsfiddle.net/YbdXQ/78/

angular/angular.js#1069,“一个指令的隔离范围隔离了同一元素上的其他指令”,谈到了这个问题:

例如,注意我的自定义指令是如何阻止 ng-model 工作的

您可能还对这个 StackOverflow 问题“ngModel and component with isolated scope”感兴趣。

于 2013-01-24T08:11:38.427 回答