Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.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_Angular Directive - Fatal编程技术网

Angularjs 如何观察指令中的角度变量并进行验证?

Angularjs 如何观察指令中的角度变量并进行验证?,angularjs,angular-directive,Angularjs,Angular Directive,我已经用Angular编写了一个简单的指令,通过该指令,我在文本框中键入的任何内容,即ion Md input,都应该在指令中验证长度为6的内容。我试着观察变量,直到它达到大小6,并验证,然后根据它激活提交按钮 index.html <div> <ion-md-input label="Enter the Device ID" hightlight-color="dark" type="text" ng-model="link" required ng-mi

我已经用Angular编写了一个简单的指令,通过该指令,我在文本框中键入的任何内容,即
ion Md input
,都应该在指令中验证长度为6的内容。我试着观察变量,直到它达到大小6,并验证,然后根据它激活提交按钮

index.html

<div>          
<ion-md-input label="Enter the Device ID" hightlight-color="dark" type="text" ng-model="link" required ng-minlength=6></ion-md-input>               
</div>

指示

vehicoApp.directive('ionMdInput', ['$http',function($http){
console.log('In ionMdInput');
  return {
    restrict : 'E',
    template : 
    '<input type="text" class="transition-input ng-model="link" required ng-minlength=6>'+
    '<span class="md-highlight"></span>'+
    '<span class="md-bar"></span>'+
    '<label>{{label}}</label>', 
    require : 'ngModel',
    scope : {
      'label' : '@',
      'ngModel' : '='
    },

link : function (scope, elem, attrs, ngModel)
{
  if(!ngModel) return;

  scope.$watch(attrs.link, function(){ 
    validate();
  }, true);

  var validate = function() {
    var val1 = ngModel.$viewValue;
    console.log(val1);
  }
 }
}
}]);
VehicleApp.directive('ionMdInput',['$http',function($http){
log('In-ionMdInput');
返回{
限制:'E',
模板:

“首先,您没有
link
属性。然后,您的作用域配置不是您在案例中的设置方式。您可以简单地将
ngModel
属性双向绑定到内部作用域模型,该模型将用作指令输入的ngModel

在这些更改之后,您可以为此模型设置watcher:

scope.$watch('model', function() {
    validate();
}, true);
整个指令将如下所示:

.directive('ionMdInput', ['$http', function($http) {
    return {
        restrict: 'E',
        template: 
            '<input type="text" class="transition-input" ng-model="model" required ng-minlength=6>' +
            '<span class="md-highlight"></span>' +
            '<span class="md-bar"></span>' +
            '<label>{{label}}</label>',
        scope: {
            'label': '@',
            'model': '=ngModel'
        },

        link: function(scope, elem, attrs) {
            if (!attrs.ngModel) return;

            scope.$watch('model', function() {
                validate();
            }, true);

            var validate = function() {
                console.log(scope.model);
            }
        }
    }
}]);
.directive('ionMdInput',['$http',函数($http){
返回{
限制:'E',
模板:
'' +
'' +
'' +
“{label}}”,
范围:{
“标签”:“@”,
'model':'=ngModel'
},
链接:功能(范围、要素、属性){
如果(!attrs.ngModel)返回;
范围:$watch('模型',函数()){
验证();
},对);
var validate=function(){
console.log(scope.model);
}
}
}
}]);

演示:

您的指令看起来一点也不简单。您能描述一下您想要实现什么吗?对ngModel控制器的引用是对“ionMdInput”指令的声明元素的引用,而不是对模板中声明的ngModel的引用。-您在哪里定义了名为link的
属性e只是一个
链接
值。@Michael刚刚更新了这个问题。很酷的东西..但是
模型
守望者只有在
$modelValue
被填满后才会被解雇,当长度达到
6
时,我写的和你一样。这样我才能理解它的本质。但是它不起作用。你能检查一下吗?注意在指令模板中有未关闭的类属性,所以实际上没有ngModel。