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函数 –