Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将解析器添加到AngularJS指令并替换原始元素?_Angularjs_Angularjs Directive - Fatal编程技术网

如何将解析器添加到AngularJS指令并替换原始元素?

如何将解析器添加到AngularJS指令并替换原始元素?,angularjs,angularjs-directive,Angularjs,Angularjs Directive,我想创建一个AngularJS指令来替换de-original元素,并对其解析函数进行一些过滤 第一个示例完全符合我的要求,但该指令并不替换原始元素: 在第二个示例中,当我更改指令以替换元素时,解析函数不再被调用,过滤停止工作: angular.module('myapp',[]) .directive('nondigit',function(){ 返回{ 限制:'E', 要求:'ngModel', 替换:正确, 模板:“”, 范围:{ 非数字模型:'=ngModel' }, 链接:函数(范

我想创建一个AngularJS指令来替换de-original元素,并对其解析函数进行一些过滤

第一个示例完全符合我的要求,但该指令并不替换原始元素:

在第二个示例中,当我更改指令以替换元素时,解析函数不再被调用,过滤停止工作:

angular.module('myapp',[])
.directive('nondigit',function(){
返回{
限制:'E',
要求:'ngModel',
替换:正确,
模板:“”,
范围:{
非数字模型:'=ngModel'
},
链接:函数(范围、元素、属性、模型控制){
如果(!modelCtrl)返回;
modelCtrl.$parsers.push(函数(inputValue){
//在这里过滤
});
}
}
})

任何人都能看出我在第二个例子中做错了什么?

经过一些实验,我找到了实现所需行为的方法。最后我使用了两个指令,一个用于对解析器函数应用过滤器,另一个用于替换元素

筛选指令:

.directive('nondigitFilter', function() {
    return {
      restrict: 'A',
      require: 'ngModel',
      link: function(scope, element, attrs, modelCtrl) {
        if(!modelCtrl) {
          return; 
        }
        modelCtrl.$parsers.push(function (inputValue) {
            //console.log('parser');
            if (inputValue == undefined) return ''

            var formatted = inputValue.replace(/\D/, '');
            if (formatted!=inputValue) {
              modelCtrl.$setViewValue(formatted);
              modelCtrl.$render();
            }         
             return formatted;         
        });
      }
    }
})
.directive('nondigit', function() {
  return {
    restrict: 'E',
    require: 'ngModel',
    replace: true,
    template: '<div><input nondigit-filter type="text" ng-model="nondigitModel"></div>',
    scope: {
        nondigitModel: '=ngModel'
    }
  }
})
<nondigit ng-model="val"></nondigit>
元素替换指令:

.directive('nondigitFilter', function() {
    return {
      restrict: 'A',
      require: 'ngModel',
      link: function(scope, element, attrs, modelCtrl) {
        if(!modelCtrl) {
          return; 
        }
        modelCtrl.$parsers.push(function (inputValue) {
            //console.log('parser');
            if (inputValue == undefined) return ''

            var formatted = inputValue.replace(/\D/, '');
            if (formatted!=inputValue) {
              modelCtrl.$setViewValue(formatted);
              modelCtrl.$render();
            }         
             return formatted;         
        });
      }
    }
})
.directive('nondigit', function() {
  return {
    restrict: 'E',
    require: 'ngModel',
    replace: true,
    template: '<div><input nondigit-filter type="text" ng-model="nondigitModel"></div>',
    scope: {
        nondigitModel: '=ngModel'
    }
  }
})
<nondigit ng-model="val"></nondigit>
.directive('nondigit',function(){
返回{
限制:'E',
要求:'ngModel',
替换:正确,
模板:“”,
范围:{
非数字模型:'=ngModel'
}
}
})
用法:

.directive('nondigitFilter', function() {
    return {
      restrict: 'A',
      require: 'ngModel',
      link: function(scope, element, attrs, modelCtrl) {
        if(!modelCtrl) {
          return; 
        }
        modelCtrl.$parsers.push(function (inputValue) {
            //console.log('parser');
            if (inputValue == undefined) return ''

            var formatted = inputValue.replace(/\D/, '');
            if (formatted!=inputValue) {
              modelCtrl.$setViewValue(formatted);
              modelCtrl.$render();
            }         
             return formatted;         
        });
      }
    }
})
.directive('nondigit', function() {
  return {
    restrict: 'E',
    require: 'ngModel',
    replace: true,
    template: '<div><input nondigit-filter type="text" ng-model="nondigitModel"></div>',
    scope: {
        nondigitModel: '=ngModel'
    }
  }
})
<nondigit ng-model="val"></nondigit>

以下是工作plnkr: