2013-10-21 38 views
2

我有一個要求,只有當輸入模糊或輸入時按下才能更新模型,並且錯誤/成功消息僅在輸入後顯示而不顯示。 以前我是用AngularJS 1.2 RC2和有下面的代碼:僅適用於模糊的AngularJS更新模型

的Javascript:

angular.module('app', []).directive('ngModelOnblur', function() { 
    return { 
     restrict: 'A', 
     require: 'ngModel', 
     link: function (scope, element, attrs, ngModelCtrl) { 
      if (attrs.type === 'radio' || attrs.type === 'checkbox') { return; } 
      var update = function() { 
       scope.$apply(function() { 
        ngModelCtrl.$setViewValue(element.val().trim()); 
        ngModelCtrl.$render(); 
       }); 
      }; 
      element.off('input').off('keydown').off('change').on('focus', function() { 
       scope.$apply(function() { 
        ngModelCtrl.$setPristine(); 
       }); 
      }).on('blur', update).on('keydown', function (e) { 
       if (e.keyCode === 13) { 
        update(); 
       } 
      }); 
     } 
    }; 
}) 
.controller('Ctrl', ['$scope', function ($scope) { 
    $scope.getClass = function (input) { 
    if (input.$pristine) { return ''; } 
    return input.$invalid ? 'has-error' : 'has-success'; 
    }; 
}]); 

HTML:

<div ng-controller="Ctrl"> 
    <form name="form" novalidate> 
    <div ng-class="getClass(form.firstname)"> 
     <input type="text" name="firstname" ng-model="firstname" ng-model-onblur ng-pattern="/^\d{4}$/" /> 
     <div class="error">error</div> 
     <div class="success">success</div> 
     $pristine: {{form.firstname.$pristine}} 
    </div> 
    </form> 
</div> 

CSS:

.error, .success { 
    display: none; 
    } 
    .has-error .error, .has-success .success { 
    display: block; 
    } 

但自從我升級到RC3,事情開始中斷。儘管我刪除了用於輸入,更改和keydown的事件處理程序,但在輸入期間$ pristine仍然設置爲false,因此將顯示消息。

我試着設置terminal: truepriority: -1作爲指令,但它仍然不起作用。我究竟做錯了什麼?

這裏是plunker:http://plnkr.co/edit/8FliNc?p=preview

在此先感謝

回答

2

它,如果你給你的指令優先爲我工作:1.設置終端= true表示NG-模式不會被調用,優先級-1我認爲不支持。

http://plnkr.co/edit/mZyWw8?p=preview

只是一些小事情,我發現該指令:當你重新集中的輸入,該模型被重置了(形式設置爲原始),evne如果模型是有效的。 如果您清空輸入,則在設置模型後,模型未設置爲未定義。