使用`this`的指令不会给出当前元素的角度js

时间:2017-11-10 22:10:33

标签: angularjs keypress angular-directive

你好我在角度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-repeat内部)

<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

所以除了当前的输入信息外,我还是得到了。那我如何得到我按下的元素? ($ event,$ element不起参数作用)

1 个答案:

答案 0 :(得分: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)">

有关详细信息,请参阅