为什么在AngularJS中模型更改时不调用ngModel的$ render?

Mis*_*hko 18 angularjs angularjs-directive

DEMO

$render单击按钮时,为什么在以下示例中未调用?

<input type="text" ng-model="client.phoneNumber" phone-number>
<button ng-click="client.phoneNumber='1111111111'">Change phone number</button>
Run Code Online (Sandbox Code Playgroud)
.directive("phoneNumber", function() {
  return {
    restrict: 'A',
    require: 'ngModel',
    link: function(scope, element, attrs, ngModel) {
      ngModel.$render = function() {
        alert('rendering');   // This is not called
      };
    } 
  };
}); 
Run Code Online (Sandbox Code Playgroud)

Kay*_*ave 33

input指令在您的指令之后运行,因此它的$render功能正在取代您的指令.

将指令的优先级设置为大于0的值.例如:

.directive("phoneNumber", function() {
  return {
    restrict: 'A',
    require: 'ngModel',
    priority: 1,
    link: function(scope, element, attrs, ngModel) {
      ngModel.$render = function() {
        alert('rendering');
      };
    } 
  };
});
Run Code Online (Sandbox Code Playgroud)

并且您$render将优先考虑,并且您将看到您的警报被调用.