模糊不工作 - Angular 2

时间:2016-08-31 22:10:16

标签: angular blur

我正试图在角度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()永远不会被执行。为什么呢?

3 个答案:

答案 0 :(得分:15)

您的blur活动无效,因为您的div无法获得焦点。如果您向tabindex="1"添加contentEditable(1可以替换为任意数字)或div(这会使div的内容可编辑),则可以获得焦点然后{{ 1}}事件将起作用。另外,您可以使用blur代替focus

答案 1 :(得分:1)

使用tabindex属性。设置tabindex =“0”将获得最高优先级,从而获得焦点,因此模糊事件将起作用

答案 2 :(得分:0)

您也可以在(focusout)="unfocusAreaInput()"上尝试div。当div中的任何可聚焦元素失去焦点(包括移除该元素时)并且div中的其他元素未同时聚焦时,将触发该事件。

如果您想知道div内哪些元素失去了焦点,可以像这样传递:(focusout)="unfocusAreaInput($event.target)"

更多信息在这里: https://developer.mozilla.org/en-US/docs/Web/API/Element/focusout_event