【问题标题】:Focus on an Input field with an animated search box in Angular专注于 Angular 中带有动画搜索框的输入字段
【发布时间】:2018-04-05 17:05:23
【问题描述】:

我有一个动画搜索框,当你点击带有类 btn-search 的链接时,它会在搜索表单中显示和滑动。

我想在搜索表单显示时关注输入字段。

我已将#searchInput 添加到输入标签并使用 ViewChild 和 ngAfterViewInit。但它不起作用并显示我的错误。 谁能帮我解决这个问题? 非常感谢。

Nav.component.html

<div class="btn-nav navbar-right">
    <a href="#" class="btn-sm btn-default btn-search" (click)="clickSearchForm()">
      Search
    </a>
</div>
<div class="nav-search clearfix" *ngIf="isSeachForm" [@slideInOut]>
    <form class="navtop navbar-form home-search" role="search">
        <div class="search-group">
            <div class="input-group clearfix" id="nav-search-input">
                <input #seachInput type="text" class="form-control dropdown-toggle" placeholder="Search">
            </div>
        </div>
    </form>
</div>

Nav.component.ts

isSeachForm: boolean = false;
@ViewChild('seachInput') searchElementRef: ElementRef;

clickSearchForm() {
    this.isSeachForm = true;
    this.searchElementRef.nativeElement.focus();
}
ngAfterViewInit(): void {
    this.searchElementRef.nativeElement.focus();
}

【问题讨论】:

    标签: angular


    【解决方案1】:

    引用 *ngIf 内部的 elementRef 会导致这种情况,因为该元素在组件初始化时不存在。最简单的解决方法应该是:

    <div class="nav-search clearfix" 
    [style.display]="isSeachForm ? 'block' : 'none'" [@slideInOut]>
    

    编辑:虽然这可能会破坏您的动画,但我相信您可以找到另一种滑动方式。

    【讨论】:

    • 感谢您的快速回复。现在没有错误信息了,但是关注输入框还是不行。
    • Hmm.. 下一个问题可能是当您尝试将注意力集中在其中时容器仍然显示:无,这是无法完成的。肮脏的修复:快速 setTimeout 延迟后调用焦点?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-28
    • 2018-09-30
    • 1970-01-01
    • 2019-08-20
    • 1970-01-01
    相关资源
    最近更新 更多