angular 2のように青いイベントを設定しようとしています:
<div id="area-button" (blur)="unfocusAreaInput()" class="form-group" (click)="focusAreaInput()">
component.ts:
import { Component, ViewChild, ElementRef, Output, EventEmitter } from '@angular/core';
import { GoogleplaceDirective } from 'angular2-google-map-auto-complete/directives/googleplace.directive';
@Component({
selector: 'my-area',
directives: [GoogleplaceDirective],
templateUrl: 'app/find-page/area-picker.component.html',
styleUrls: ['app/find-page/area-picker.component.css']
})
export class AreaComponent {
public address: Object;
@ViewChild('areaInput') areaInput;
areaSelected: boolean = false;
@Output() onAreaSelected = new EventEmitter<boolean>();
@Output() onAreaDeselected = new EventEmitter<boolean>();
constructor(el: ElementRef) { }
getAddress(place: Object) {
this.address = place['formatted_address'];
var location = place['geometry']['location'];
var lat = location.lat();
var lng = location.lng();
console.log("Address Object", place);
}
focusAreaInput() {
this.areaInput.nativeElement.focus();
this.onAreaSelected.emit(true);
}
unfocusAreaInput() {
this.onAreaSelected.emit(false);
}
}
unfocusAreaInput()は実行されません。どうして?
blur
はそもそもフォーカスを受け取ることができないため、div
イベントは機能していません。 tabindex="1"
(1は任意の数字に置き換えることができます)またはcontentEditable
(これによりdivのコンテンツが編集可能になります)をdiv
に追加すると、フォーカスを受け取り、その後フォーカスを受け取ることができます。 blur
イベントは機能します。さらに、focus
の代わりにclick
を使用できます。
div
で(focusout)="unfocusAreaInput()"
を試すこともできます。これは、div内のフォーカス可能な要素がフォーカスを失った場合(要素が削除された場合を含む)、div
内の他の要素が同時にフォーカスされない場合に発生します。
div
内でフォーカスを失った要素を知りたい場合は、(focusout)="unfocusAreaInput($event.target)"
のように渡すことができます。
詳細はこちら: https://developer.mozilla.org/en-US/docs/Web/API/Element/focusout_event
Tabindexプロパティを使用します。tabindex= "0"を設定すると、フォーカスを取得する際の優先度が最も高くなるため、ぼかしイベントが機能します