Angular2-将文本框放在组件加载上 [英] Angular2 - Focusing a textbox on component load

查看:51
本文介绍了Angular2-将文本框放在组件加载上的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在开发Angular2(测试版8)中的组件.该组件具有一个文本框和一个下拉列表.我想在组件加载后或下拉菜单的change事件中立即在文本框中设置焦点.我将如何在angular2中实现这一目标.以下是该组件的HTML.

I am developing a component in Angular2 (Beta 8). The component has a textbox and a dropdown. I would like to set the focus in textbox as soon as component is loaded or on change event of dropdown. How would I achieve this in angular2. Following is Html for the component.

<div>
    <form role="form" class="form-horizontal ">        
        <div [ngClass]="{showElement:IsEditMode, hidden:!IsEditMode}">
            <div class="form-group">
                <label class="control-label col-md-1 col-sm-1" for="name">Name</label>
                <div class="col-md-7 col-sm-7">
                    <input id="name" type="text" [(ngModel)]="person.Name" class="form-control" />

                </div>
                <div class="col-md-2 col-sm-2">
                    <input type="button" value="Add" (click)="AddPerson()" class="btn btn-primary" />
                </div>
            </div>
        </div>
        <div [ngClass]="{showElement:!IsEditMode, hidden:IsEditMode}">
            <div class="form-group">
                <label class="control-label col-md-1 col-sm-1" for="name">Person</label>
                <div class="col-md-7 col-sm-7">
                    <select [(ngModel)]="SelectedPerson.Id"  (change)="PersonSelected($event.target.value)" class="form-control">
                        <option *ngFor="#item of PeopleList" value="{{item.Id}}">{{item.Name}}</option>
                    </select>
                </div>
            </div>
        </div>        
    </form>
</div>

推荐答案

此答案的灵感来自帖子

This answer is inspired by post Angular 2: Focus on newly added input element

在Angular2中将焦点设置为HTML元素的步骤

Steps to set the focus on Html element in Angular2

  1. 将ViewChildren导入您的组件

  1. Import ViewChildren in your Component

import { Input, Output, AfterContentInit, ContentChild,AfterViewInit, ViewChild, ViewChildren } from 'angular2/core';

  • 为要为其设置焦点的html声明本地模板变量名称

  • Declare local template variable name for the html for which you want to set the focus

    以下是我用于设置焦点的那段代码

    Following is the piece of code which I used for setting the focus

    ngAfterViewInit() {vc.first.nativeElement.focus()}
    

  • 向要访问的DOM元素添加#input属性.

    ///This is typescript
    import {Component, Input, Output, AfterContentInit, ContentChild,
      AfterViewChecked, AfterViewInit, ViewChild,ViewChildren} from 'angular2/core';
    
    export class AppComponent implements AfterViewInit,AfterViewChecked { 
       @ViewChildren('input') vc;
      
       ngAfterViewInit() {            
            this.vc.first.nativeElement.focus();
        }
      
     }

    <div>
        <form role="form" class="form-horizontal ">        
            <div [ngClass]="{showElement:IsEditMode, hidden:!IsEditMode}">
                <div class="form-group">
                    <label class="control-label col-md-1 col-sm-1" for="name">Name</label>
                    <div class="col-md-7 col-sm-7">
                        <input #input id="name" type="text" [(ngModel)]="person.Name" class="form-control" />
    
                    </div>
                    <div class="col-md-2 col-sm-2">
                        <input type="button" value="Add" (click)="AddPerson()" class="btn btn-primary" />
                    </div>
                </div>
            </div>
            <div [ngClass]="{showElement:!IsEditMode, hidden:IsEditMode}">
                <div class="form-group">
                    <label class="control-label col-md-1 col-sm-1" for="name">Person</label>
                    <div class="col-md-7 col-sm-7">
                        <select [(ngModel)]="SelectedPerson.Id"  (change)="PersonSelected($event.target.value)" class="form-control">
                            <option *ngFor="#item of PeopleList" value="{{item.Id}}">{{item.Name}}</option>
                        </select>
                    </div>
                </div>
            </div>        
        </form>
    </div>

    这篇关于Angular2-将文本框放在组件加载上的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

  • 查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆