2

我已經創建了一個自定義指令,該指令位於我的輸入字段中。此指令的目的是分析Inputfield中的值/數據。 This directive is supposed to be called everytime the inputField is given focus/cursor.指令只被調用一次

但問題是,我的自定義指令纔會被調用一次。我不知道爲什麼每次輸入字段的焦點都不會被調用。

我在這裏做錯了什麼?

我是Angular的新手,所以我肯定有一些重要的細節我錯過了某個地方。

這是plunker

+0

不鏈接plunkr,使用堆棧段或顯示代碼。當plunkr鏈接不再可用時,這個問題是不可用的 – Walfrat

+0

@Walfrat好的。 Downvoter,請務必說出倒票的原因,以便將來不會重複「假定」的錯誤! –

+0

那是原因:) – Walfrat

回答

2

這是預期的行爲,鏈接函數僅針對任何指定的指令實例調用一次。既然你感興趣的focus情況下,我加入到該元素的指令適用於事件偵聽器:

var mainApp = angular.module("myapp", ['ngMaterial']); 

mainApp.directive("myDirective", function($log) { 
    return { 
     restrict : 'A', 
     require : "ngModel", 
     scope : { 
      myDirective : "=" 
     }, 
     link : function(scope, element, attrs, ngModel) { 
      element.on('focus', doSomething); 

      function doSomething() { 
      $log.log("value is:", scope.myDirective); 
      if (ngModel.$isEmpty() && scope.myDirective && scope.myDirective.length > 0) { 
       ngModel.$setUntouched(); 
       ngModel.$setValidity(); 
      } 
     } 

     } 
    } 
}); 

http://plnkr.co/edit/RwTSsQKBtzzJDXE8by1I?p=preview

既然你也提到了「光標」,你可能會喜歡mouseover事件也是如此。這是因爲添加另一個事件監聽器一樣簡單:

element.on('mouseover', doSomething)

注:我添加了一個額外的支票scope.myDirective避免對閱讀的undefinedlength控制檯錯誤。

在OP的要求:

我不知道,如果jqLit​​e支持所有這些,但對於所有DOM事件的列表,你應該檢查這個page,你可能最感興趣的FOCUS-,鍵盤 - &鼠標事件。

有關所有jqLit​​e功能列表來查看this

+0

完美!你能把我鏈接到「元素」對象可以使用的函數列表嗎?你還可以將我鏈接到「焦點」/「鼠標懸停」之類的事件列表嗎? –

+0

@UmerFarooq我在我的文章中添加了相關鏈接 –

+0

@UmerFarooq我錯過了它,但我還添加了一個鏈接到所有jqLit​​e函數 –