2015-04-17 5 views
4

В angularjs у меня было следующее:Как поймать возврат на входном элементе с помощью Aurelia?

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

Так в основном, как только я закончил печатать свой текст для поиска, когда я нажал кнопку ввода функции поиска на моем контроллере будет работать.

Как бы это сделать в Аурелии?

Я все еще узнаю о его возможностях, поэтому любая помощь будет оценена по достоинству.

+1

Я считаю, что пометка как angularjs недействительна, потому что вы хотите что-то сделать в другой структуре. И никто не обязан знать углы, чтобы ответить на этот вопрос. –

ответ

12

Простейшим способом было бы обернуть 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> 

Это даст вам то же поведение, которое вы построили выше. Я все еще работаю над созданием примера пользовательского атрибута для этого, но, честно говоря, так я бы порекомендовал вам сделать эту конкретную вещь (захват, когда пользователь нажимает кнопку ввода).

+0

Это абсолютно способ сделать это. упаковка в форме позволит использовать все виды других желаемых действий, включая дополнительные кнопки сброса. –

+0

Это не работает, если у вас несколько кнопок (по крайней мере, в Chrome, во всяком случае). Он также не будет работать, если вы хотите связать ввод ключа внутри одной формы с различными действиями в зависимости от того, где именно они находятся в форме. – aleith

+0

Это то, что сработало для меня! Благодаря! – learn2reid

3

Это, похоже, не поддерживается из коробки. Пока не идеально, вот что я намерен сделать:

  • Добавить скрытую кнопку Отправить в верхней части моей формы с атрибутом click.delegate.
  • Запустите некоторый код в моей VM, когда его щелкнули. Этот код решит, что делать с нажатием клавиши ввода на основе любой настраиваемой логики, в которой я нуждаюсь.

Надежда, что помогает, Эндрю

EDIT:

Вы также можете добавить нажатие клавиши делегат события:

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

и определить DoSomething() как:

doSomething(event) { 
    if(event.which == 13) { 
    alert('Your code goes here!'); 
    } 
    event.preventDefault(); 
} 

Это будет немного чище, когда у вас много входов с различными типами нажатия клавиш.

+0

'keypress.delegate' и' keypress.trigger' в '' блок ввода текста – gronostaj

11

Я думаю, альтернатива углового 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()"/>

1

Из keypress.delegate и keypress.trigger в качестве <input> блока ввода текста по умолчанию, ваша функция должна возвращать верно, чтобы избежать его , например:

doSomething(event) { 
    if(event.which == 13) { 
     console.log('Your code goes here!'); 
     event.preventDefault(); 
     return false; 
    } 
    return true; 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^