我有一个指令,当按下enter键时,会触发一个事件或表达式。我想将元素值传递给我的尝试所见的事件或表达式:{ 'myArg': element.val() }
该指令有效,我的事件被调用,但参数未定义。
我缺少什么或需要修复什么?
app.directive('schdKeyenter', function () {
return function (scope, element, attrs) {
element.bind("keydown keypress", function (event) {
if (event.which === 13) {
scope.$apply(function () {
scope.$eval(attrs.schdKeyenter, { 'someArg': element.val() });
});
event.preventDefault();
}
});
};
});
用法:
<input type="text" schd-keyenter="onEnterPressed(someArg)">
当调用onEnterPressed()时,someArg未定义。
答案 0 :(得分:0)
经过几天的观察,我终于找到了一个清理道路的例子。我不知道$ parse,这使得一切成为可能。可能有另一种方法可以做到这一点,但现在这是我的解决方案。
app.directive('schdKeyenter', ['$parse', function ($parse) {
return function (scope, element, attr) {
element.bind("keydown keypress", function (event) {
if (event.which === 13) {
var attrHandler = $parse(attr['schdKeyenter'])
scope.$apply(function () {
attrHandler(scope, { $event: event, $value: element.val() });
});
event.preventDefault();
}
});
}
}]);
用法:
<input type="text" schd-keyenter="onEnterPressed($event, $value)">
我构建此示例的示例是:https://stackoverflow.com/a/26591042/3701159。