如何使用Aurelia捕获输入元素的返回值?

时间:2015-04-17 02:22:35

标签: aurelia

在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)">

所以基本上一旦我输入了要搜索的文本,当我按下回车键时,我的控制器上的搜索功能就会运行。

我如何在奥里利亚做到这一点?

我仍然在了解它的功能,所以任何帮助都会受到赞赏。

3 个答案:

答案 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;
}