自定义指令不启动

时间:2016-08-23 15:28:03

标签: javascript angularjs angularjs-directive angularjs-scope

我有一个指令,可以进行一些价格验证,我认为它运作良好,直到我发现一个错误,例如,如果我在输入中验证的下一个价格价格是相同的前一个,下一个未经验证,我不明白为什么,如果它是不同的值,它没有问题,但如果值与前一个相同,指令不会被激发,我有不知道与上面的'asyncValidators'是否存在任何关系,我留下了我的自定义指令。

指令:

(function() {
  'use strict';

  angular
    .module('myApp')
    .directive('priceValidator', priceValidator);

  priceValidator.$inject = ['$q', 'ServerValidatorService'];

  /* @ngInject */
  function priceValidator($q, ServerValidatorService) {
    var directive = {
      link: link,
      restrict: 'A',
      require: 'ngModel',
      scope: {
        costPrice: '=',
        currentPvp: '='
      }
    };
    return directive;

    function link(scope, element, attrs, ctrl) {
      ctrl.$asyncValidators.costPrice = function(costPrice) {
        var pvp = scope.currentPvp;

        scope.currentPrice = costPrice;

        var cost = String(costPrice).replace(",", ".");

        return ServerValidatorService.validateCostPrice(pvp, cost)
          .then(function() {
              return true;
            },
            function(response) {
              ctrl.$setDirty();
              if (response.data.errors.maximum[0])
                scope.costPrice = response.data.errors.maximum[0];
              return $q.reject(response.data.message);
            });
      };
    }
  }
})();

// Controller function that fill form with each product info:


function getMainProduct(productLine) {

  if (typeof productLine !== "undefined") {

    vm.discountId = productLine.discount_id;
    vm.discountPercentage = productLine.discount_percentage;
    vm.valuePrice = productLine.value_price;

  }

}

HTML

<input type="text" class="form-control" 
name="discount" ng-model="form.discPrice" 
ng-model-options="{updateOn: 'default blur', debounce: {'default': 300, 'blur': 0} }" 
ng-required="formCtrl.isP()" cost-price="form.maxP" 
current-pvp="form.pvp" num-type="decimal"  
ng-change="formCtrl.check()" price-validator>

0 个答案:

没有答案