在angularjs中我有以下内容:
app.directive('ngEnter', function () {
return function (scope, element, attrs) {
element.bind("keydown keypress", function (event) {
if(event.which === 13) {
scope.$apply(function (){
scope.$eval(attrs.ngEnter);
});
event.preventDefault();
}
});
};
});
html是:
<input type="text" ng-model="searchText" class="form-control"
placeholder="Search"
ng-enter="search($event, searchText)">
所以基本上一旦我输入了要搜索的文本,当我按下回车键时,我的控制器上的搜索功能就会运行。
我如何在奥里利亚做到这一点?
我仍然在了解它的功能,所以任何帮助都会受到赞赏。
答案 0 :(得分:16)
最简单的方法是将input
包装在form
元素中并绑定到表单的submit
事件。
<form role="form" submit.delegate="search()">
<div class="form-group">
<label for="searchText">Search:</label>
<input type="text" value.bind="searchText"
class="form-control" id="searchText"
placeholder="Search">
</div>
<button type="submit" class="btn btn-default">Submit</button>
</form>
这将为您提供与上面构建的相同的行为。我还在努力创建一个自定义属性的示例来执行此操作,但老实说,我建议您执行此特定操作(在用户按下Enter时捕获)。
答案 1 :(得分:15)
我认为角度ngEnter的替代方案是:
import {customAttribute, inject} from 'aurelia-framework';
@customAttribute('enter-press')
@inject(Element)
export class EnterPress {
element: Element;
value: Function;
enterPressed: (e: KeyboardEvent) => void;
constructor(element) {
this.element = element;
this.enterPressed = e => {
let key = e.which || e.keyCode;
if (key === 13) {
this.value();//'this' won't be changed so you have access to you VM properties in 'called' method
}
};
}
attached() {
this.element.addEventListener('keypress', this.enterPressed);
}
detached() {
this.element.removeEventListener('keypress', this.enterPressed);
}
}
<input type="password" enter-press.call="signIn()"/>
答案 2 :(得分:1)
由于keypress.delegate
块中的keypress.trigger
和<input>
默认情况下输入文本,因此您的函数必须返回true以避免它,如下所示:
doSomething(event) {
if(event.which == 13) {
console.log('Your code goes here!');
event.preventDefault();
return false;
}
return true;
}