在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();
}
});
};
});
Run Code Online (Sandbox Code Playgroud)
而html是:
<input type="text" ng-model="searchText" class="form-control"
placeholder="Search"
ng-enter="search($event, searchText)">
Run Code Online (Sandbox Code Playgroud)
所以基本上一旦我完成了键入我的文本搜索,当我按下回车键时,我的控制器上的搜索功能就会运行.
我怎么在Aurelia这样做?
我仍在了解它的功能,所以任何帮助将不胜感激.
Ash*_*ant 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>
Run Code Online (Sandbox Code Playgroud)
这将为您提供与上面构建的相同的行为.我仍在努力创建一个自定义属性的示例来执行此操作,但老实说,这就是我建议您执行此特定操作的方法(在用户按下Enter时捕获).
小智 16
我认为角度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);
}
}Run Code Online (Sandbox Code Playgroud)
<input type="password" enter-press.call="signIn()"/>Run Code Online (Sandbox Code Playgroud)