在AngularJs指令中手动将输入字段设置为无效

时间:2018-02-12 14:16:22

标签: javascript angularjs

我有一个非常简单的指令,其目的是做两件事:

  1. 使用NgModel从非角度第三方库中创建一个“蒙面”输入字段。
  2. 检查输入值,获取有效的unix时间戳。
  3. 我正在使用 Jasny bootstrap 插件,为日期输入创建“数据屏蔽”。

    我的输入字段:

      <input ng-class="{ 'input_error' : bdayForm.bday.$invalid && !bdayForm.bday.$pristine 
        || bdayForm.bday.$invalid && submitted }" 
        apply-scope ng-model="bday"  name="bday" id="bday" type="text" placeholder="" 
        data-mask="99/99/9999" class="required">
    

    注意data-mask属性。这将应用插件提供的数据屏蔽功能。 apply-scope属性是我创建的指令的名称。这是我到目前为止的代码:

    app.directive("applyScope", function() {
      return {
    
        require: "ngModel",
        link: function(scope, element, attrs, ngModel) {
          element.bind('keydown', (e) => {
    
            const arr = element[0].value.split("/")
            let newBday = `${arr[2]}/${arr[1]}/${arr[0]} 00:00:00`
            newBday = (new Date(newBday).getTime() / 1000 + 7200) //This will convert the bday to unix time stamp.
    
            if (!newBday) {
              return false;
            }
            ngModel.$setViewValue(newBday);
    
          })
        }
      };
    });
    

    如您所见,我将“99/99/9999”字符串拆分为数组,然后尝试构建一个unix时间戳。

    如果是NaN,我会返回false。我想要实现的是,当函数返回$invalid时,将输入字段设置为false。我需要使用这个$invalid属性来使我的ng-class条件工作(基本上只是将红色应用于输入)

    有人能解释我应该怎么做吗?

0 个答案:

没有答案