1

我在 AngularJS 中编写了一个指令,并将输入类型号与 min-max 和 ng-model 属性一起使用。我使用了隔离范围。在指令中,我写了一个模糊事件。我得到最小值-最大值但没有得到ng-model值:

<input my-directive min="5" max="10" ng-model="num" type="number">
myApp.directive('myDirective', function () {
  function link($scope, ele, attr) {
    $scope.$watch('num', function (value) {
      console.log(value);
    })
    ele.on('blur', function () {
      console.log($scope.num, $scope.min, $scope.max);
    })
  }
  return {
    restrict : 'A',
    scope: {
      num: "=ngModel",
      min: "=?",
      max: "=?"
    },
    link: link
  }
});

输出:未定义 5 10

我究竟做错了什么?

4

1 回答 1

1

与其使用对 的绑定ngModelrequire不如将其注入到链接函数中:

myApp.directive('myDirective', function () {
  function link($scope, ele, attr, ngModel) { // <--- inject
    $scope.$watch(() => ngModel.$viewValue, (n, o) => {
      // watching `ngModel.$viewValue`
      console.log('WATCH', n, o);
    })
    ele.on('blur', function () {
      // `ngModel.$viewValue` is the current value
      console.log('BLUR', ngModel.$viewValue, $scope.min, $scope.max);
    })
  }
  return {
    require: 'ngModel', // <--- require 
    restrict : 'A',
    scope: {  // <--- remove `ngModel` binding from scope
      min: "=?",
      max: "=?"
    },
    link: link
  }
});

这是一个演示

于 2020-04-05T10:04:09.917 回答