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

如何使用Aurelia捕捉输入元素的返回?,aurelia,Aurelia,在angularjs中,我有以下几点: app.directive('ngEnter', function () { return function (scope, element, attrs) { element.bind("keydown keypress", function (event) { if(event.which === 13) { scope.$apply(function (){ sco

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

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

在奥雷利亚我该怎么做


我仍在学习它的功能,因此非常感谢您的帮助。

最简单的方法是将
输入
包装在
表单
元素中,并绑定到表单的
提交
事件

<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键时捕获)。

这似乎不受开箱即用的支持。虽然不完美,但我打算做以下几点:

  • 在我的表单顶部添加一个隐藏的提交按钮,带有
    click.delegate
    属性
  • 单击我的虚拟机时,在虚拟机中运行一些代码。此代码将根据我需要的任何自定义逻辑决定如何使用enter键
希望有帮助, 安德鲁

编辑:

您还可以添加按键事件委托:

<input keypress.delegate="doSomething($event)" />

当您有许多输入具有不同的回车键行为时,这将稍微干净一些

我认为角度中心的另一种选择是:

import{customAttribute,inject}来自'aurelia framework';
@customAttribute('enter-press')
@注入(元素)
出口级企业{
元素:元素;
价值:功能;
按enterPressed:(e:键盘事件)=>无效;
构造函数(元素){
this.element=元素;
this.enterPressed=e=>{
设key=e.which | | e.keyCode;
如果(键===13){
this.value();//“this”不会更改,因此您可以在“called”方法中访问VM属性
}
};
}
附({
this.element.addEventListener('keypress',this.enterPressed);
}
分离的(){
this.element.removeEventListener('keypress',this.enterPressed);
}
}

由于默认情况下,在
块中输入文本时,由于
按键按钮.delegate
按键按钮.trigger
的缘故,您的函数必须返回true以避免它,如下所示:

doSomething(事件){
if(event.which==13){
log('您的代码在这里!');
event.preventDefault();
返回false;
}
返回true;
}

我认为标记为angularjs是无效的,因为您希望在另一个框架上执行某些操作。回答这个问题不需要知道angularjs,这绝对是一种方法。在表单中包装将启用所有其他所需的行为,包括可选的重置按钮。当您有多个按钮时,这似乎不起作用(至少在Chrome中不起作用)。如果您想将一个窗体内的enter键绑定到不同的操作,这也将不起作用,具体取决于这些操作在窗体中的确切位置。+1到此值。几天前,我有一个类似的场景,当我把它包装在一个表单标签中(老实说,如果你生成了正确的语义HTML5代码,你无论如何都应该这样做),我不仅得到了回报,而且我的标签功能又开始工作了,它帮助aurelia auth更好地进行验证,除了我注意到按钮点击验证正确,但进入将通过它。Search()函数需要测试验证,如下所示:Search(){this.controller.validate().then(result=>{if(result.valid){…我原来有validate().then()=>…另外,如果“test--”在搜索文本框中由于“-”而无效您还需要测试它将指向的路径,这意味着您不能直接执行类似操作:@Kamil的答案是最好和最通用的解决方案。
keypress.delegate
keypress.trigger
在一个
块中输入文本非常好的答案。谢谢Kamil。我也使用此解决方案进行详细说明cting ctrl+enter按我的文本区域。哪个键的代码是10。这是最好的解决方案,应该标记为答案。
doSomething(event) {
  if(event.which == 13) {
    alert('Your code goes here!');
  }
  event.preventDefault();
}