当自定义指令应用于输入字段时,模型的值消失了



我有一个这样的输入字段,我在其中应用自定义指令进行验证。

<input type="text" data-ng-model="ev.name" ischanged="{{d.EventName}}"/>

该指令是这样的:

app.directive('ischanged', function () {
'use strict';
return {
    require: 'ngModel',
    link: function (scope, elem, attr, ctrl) {
        ctrl.$parsers.unshift(function (input) {
            if(attr.ischanged == input) {
                ctrl.$setValidity('ischanged', false);                      
            }
            else if(attr.ischanged != input)
            {                   
                ctrl.$setValidity('ischanged', true);   
            }
        });
     }
    };
});

该指令将该值与另一个值进行比较,并相应地设置字段的有效性。但是,当我应用此指令时。 当我在其中输入值时,{{ev.name}}不会显示任何内容。

当我完全删除指令时{{ev.name}}很好。

当我尝试通过http.put更新时,我意识到了这个问题,它说其中一个数据是空的。

您缺少用于更新指令中模型的 return 语句。 如果值有效,我添加了一个只是为了更新模型。 您可以决定如何处理无效案例。

app.directive('ischanged', function() {
  return {
    restrict: 'A',
    require: 'ngModel',
    link: function(scope, elem, attr, ctrl) {
      ctrl.$parsers.unshift(function(input) {
        if (attr.ischanged == input) {
          ctrl.$setValidity('ischanged', false);
          return input ? input : undefined;
        } else if (attr.ischanged != input) {
          ctrl.$setValidity('ischanged', true);
        }
      });
    }
  };
});

这是一个工作 plunker,它还包括一些 HTML 更改,以便您可以看到验证工作和模型更新。

最新更新