2017-11-10 72 views
1

你好即時通訊使用這個指令在角JS跟蹤輸入按鍵指令用`this`犯規給當前元素角JS

angular.module('botApp').directive('myEnter', function() { 
    return function (scope, element, attrs) { 
     element.bind("keydown keypress", function (event) { 
      if(event.which === 13) { 
       scope.$apply(function(){ 
        scope.$eval(attrs.myEnter); 
       }); 

       event.preventDefault(); 
      } 
     }); 
    }; 
}); 

但是當我嘗試此一輸入元件(至極是NG-內部重複)

<input id="inp-test_text" class="default-input inp-loading" type="text" 
     name="test_text" ng-model="app.test_text" 
     my-enter="inputEnter(this)"> 

和JS我有:

$scope.inputEnter = function(currentInput) { 
     console.log(currentInput); 
    } 

我得到這個作爲一個答案:

console-log of currentInput

因此,除了當前的輸入信息,我得到了everthing。所以我如何獲得我按下的輸入元素? ($事件,$元件不作爲參數工作)

回答

1

Angular expressions,標識符this訪問上下文對象這在$eval的情況下是scope對象。

提供當地element,將其添加爲本地:

app.directive('myEnter', function() { 
    return function (scope, element, attrs) { 
     element.bind("keydown keypress", function (event) { 
      if(event.which === 13) { 
       scope.$apply(function(){ 
        ̶s̶c̶o̶p̶e̶.̶$̶e̶v̶a̶l̶(̶a̶t̶t̶r̶s̶.̶m̶y̶E̶n̶t̶e̶r̶)̶;̶ 
        scope.$eval(attrs.myEnter, {$element: element}); 
       }); 

       event.preventDefault(); 
      } 
     }); 
    }; 
}); 

然後將可爲本地:

<input id="inp-test_text" class="default-input inp-loading" type="text" 
     name="test_text" ng-model="app.test_text" 
     ̶m̶y̶-̶e̶n̶t̶e̶r̶=̶"̶i̶n̶p̶u̶t̶E̶n̶t̶e̶r̶(̶t̶h̶i̶s̶)̶"̶ 
     my-enter="inputEnter($element)"> 

欲瞭解更多信息,請參閱

+0

它的工作原理!非常感謝你!! –

+0

對不起,我忘了! –

+0

在引擎蓋下,['scope。$ eval'](https://docs.angularjs.org/api/ng/type/$rootScope.Scope#$eval)使用'$ parse'服務。有關更多信息,請參閱[AngularJS'$ parse'服務API參考](https://docs.angularjs.org/api/ng/service/$parse)。 – georgeawg