2015-09-27 70 views
1

我寫了一個簡單的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); 
    } 
} 
} 
}]); 

現在,即使是在我開始在文本框中鍵入名稱。我得到一個未定義的,仍然是這樣。現在我想看到這個價值並驗證它。我會怎麼做呢? 經過大量SO帖子後我沒有看到任何錯誤。

+0

你的指令不看起來那麼簡單。你能描述一下你想達到的目標嗎?對ngModel控制器的引用是對'ionMdInput'指令的聲明元素的引用 - 而不是模板中聲明的ngModel。 - 你在哪裏定義了一個名爲link的「屬性」?只有一個「鏈接」值。 – Michael

+0

@Michael剛剛更新了這個問題。 –

回答

3

首先你沒有link屬性。那麼你的範圍配置不是你將如何設置在你的情況。您可以簡單地將ngModel屬性雙向綁定到內部作用域模型,該模型將用作指令輸入的ngModel。

這些更改後,您可以設置觀察家這種模式:

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); 
      } 
     } 
    } 
}]); 

演示:http://plnkr.co/edit/wh8ylLbW4YpZcEKOryae?p=preview

+0

很酷的東西..但'模型'觀察者只會在'$ modelValue'在長度達到'6'時被填滿' –

+0

我寫了同樣的[plunk](http://plnkr.co/edit/0S8tJoQjsr29VTzv4LCR ?p =預覽)和你一樣。這樣我才能理解它的實質。但它不起作用。你能檢查嗎? –

+0

請注意,您在指令模板中具有未關閉的類屬性。所以有效的你沒有ngModel。 – dfsq