Làm thế nào để sử dụng sự kiện onBlur trên Angular2?


112

Làm thế nào để bạn phát hiện một sự kiện onBlur trong Angular2? Tôi muốn sử dụng nó với

<input type="text">

Bất cứ ai có thể giúp tôi hiểu cách sử dụng nó?

Câu trả lời:


211

Sử dụng (eventName)trong khi ràng buộc sự kiện với DOM, về cơ bản ()được sử dụng để ràng buộc sự kiện. Cũng sử dụng ngModelđể có được ràng buộc hai chiều cho myModelbiến.

Đánh dấu

<input type="text" [(ngModel)]="myModel" (blur)="onBlurMethod()">

export class AppComponent { 
  myModel: any;
  constructor(){
    this.myModel = '123';
  }
  onBlurMethod(){
   alert(this.myModel) 
  }
}

Bản giới thiệu

Thay thế (không thích hợp)

<input type="text" #input (blur)="onBlurMethod($event.target.value)">

Bản giới thiệu


Đối với biểu mẫu hướng mô hình để kích hoạt xác thực blur, bạn có thể chuyển updateOntham số.

ctrl = new FormControl('', {
   updateOn: 'blur', //default will be change
   validators: [Validators.required]
}); 

Tài liệu thiết kế


2
Tại sao giải pháp thay thế không được ưu tiên?
slp

Angular không muốn bạn sử dụng sự kiện $ bên trong HTML để gửi lại JS. Tất cả các hoạt động DOM nên được thực hiện thông qua những thứ như ràng buộc, ngModel và whatnot.
Barton Durbin

14

Bạn cũng có thể sử dụng sự kiện (tiêu điểm) :

Sử dụng (eventName)trong khi ràng buộc sự kiện với DOM, về cơ bản ()được sử dụng để ràng buộc sự kiện. Ngoài ra, bạn có thể sử dụng ngModelđể có được ràng buộc hai chiều cho của bạn model. Với sự giúp đỡ của ngModelbạn, bạn có thể thao tác modelgiá trị biến bên trongcomponent .

Làm điều này trong tệp HTML

<input type="text" [(ngModel)]="model" (focusout)="someMethodWithFocusOutEvent($event)">

Và trong tệp .ts (thành phần) của bạn

export class AppComponent { 
 model: any;
 constructor(){ }
 someMethodWithFocusOutEvent(){
   console.log('Your method called');
   // Do something here
 }
}

@Aniketkale Nếu tôi đặt một cảnh báo trong phương thức của bạn someMethodWithFocusOutEvent, chương trình sẽ đi vào một vòng lặp vì cảnh báo làm cho trường mất tiêu điểm, có cách nào để khắc phục điều này không?
ps0604

6

bạn có thể sử dụng sự kiện trực tiếp (làm mờ) trong thẻ đầu vào.

<div>
   <input [value] = "" (blur) = "result = $event.target.value" placeholder="Type Something">
   {{result}}
</div>

và bạn sẽ nhận được đầu ra trong " kết quả "


3

HTML

<input name="email" placeholder="Email"  (blur)="$event.target.value=removeSpaces($event.target.value)" value="">

TS

removeSpaces(string) {
 let splitStr = string.split(' ').join('');
  return splitStr;
}

1
/*for reich text editor */
  public options: Object = {
    charCounterCount: true,
    height: 300,
    inlineMode: false,
    toolbarFixed: false,
    fontFamilySelection: true,
    fontSizeSelection: true,
    paragraphFormatSelection: true,

    events: {
      'froalaEditor.blur': (e, editor) => { this.handleContentChange(editor.html.get()); }}


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.