2016-01-13 54 views
1

我有一個輸入字段,當modalOpen = true時,它會添加活動類,並且這個工作正常。關注價值變化的投入領域? angular2

但是,我希望它在此模式顯示時專注於輸入字段?

<div [class.active]="modalOpen"> 
    <input> 
</div> 
+0

貌似http://stackoverflow.com/questions/34522306/angular-2-focus-on-newly-added-input-element –

回答

1

我在哪裏設置當元件涉及「活性」集中的樣品組分。 這裏是我的方法:

export class Spreadsheet implements AfterViewChecked{ 

    ngAfterViewChecked(){ 
     //some logic to find "active" element 
     let cell = document.getElementById(this.model.current.rowIndex + '-' + this.model.current.columnIndex); 
     cell.focus(); 
    } 
} 

這裏更多: http://www.syntaxsuccess.com/viewarticle/virtualized-spreadsheet-component-in-angular-2.0

http://www.syntaxsuccess.com/angular-2-samples/#/demo/spreadsheet

5

本地模板變量添加到您的輸入元素:<input #input1>,並得到一個參考使用它來@ViewChild('input1') input1ElementRef;

然後,無論你在哪裏設置modalOpentrue,還可以將焦點集中在this._renderer.invokeElementMethod(this.input1ElementRef.nativeElement, 'focus', [])的輸入元素上。
使用渲染器是Web工作者的安全。

import {Component, ViewChild, Renderer} from 'angular2/core'; 

@Component({ 
    selector: 'my-comp', 
    template: `<div [class.active]="modalOpen"> 
     <input #input1> 
    </div> 
    <button (click)="showModal()">show modal</button>` 
}) 
export class MyComponent { 
    @ViewChild('input1') input1ElementRef; 
    modalOpen = false; 
    constructor(private _renderer:Renderer) {} 
    showModal() { 
    this.modalOpen = true; 
    // give Angular a chance to create or show the modal 
    setTimeout(_ => 
     this._renderer.invokeElementMethod(
     this.input1ElementRef.nativeElement, 'focus', []); 
    ); 
    } 
} 

@Component({ 
    selector: 'my-app', 
    template: `<my-comp></my-comp>`, 
    directives: [MyComponent] 
}) 
export class AppComponent { 
    constructor() { console.clear(); } 
} 

plunker

+0

感謝的DUP!我一直在尋找這個 - 我想單擊按鈕時關注輸入。 – Drusantia