正如你可以看到我正在使用setTimeout,如果我打算集中我的输入。 如果我删除setTimeout焦点不起作用。
<div [hidden]="searchInputHidden">
<input (blur)="hideInput()" #term (keyup)="search(term.value)" type="text" class="inp_top" name="product_name" id="product_name" />
</div>
private showSearchInput(term) {
this.searchInputHidden = false;
setTimeout(function(){
term.focus();
}, 100);
}
答案 0 :(得分:20)
超时是必需的,因为您不能focus()
仍然隐藏的元素。在Angular更改检测有机会运行之前(将在方法showSearchInput()
完成执行之后),即使您将hidden
设置为{,也不会更新DOM中的searchInputHidden
属性你方法中的{1}}。
值为0的false
(或没有值,默认值为0)应该有效。您只需在Angular有机会更新setTimeout()
属性值后设置焦点。
请注意,在hidden
回调函数完成执行后,更改检测将再次运行(因为Angular monkey-patches在Angular区域中调用所有setTimeout()
个调用)。由于我们在异步回调函数中唯一改变的是焦点,我们可以更高效并在Angular区域外运行我们的回调函数,以避免额外的更改检测周期:
setTimeout()
请注意,您必须将NgZone注入构造函数中才能使上述代码正常工作:
private showSearchInput(term) {
this.searchInputHidden = false;
this._ngZone.runOutsideAngular(() => {
setTimeout(() => term.focus());
});
}
答案 1 :(得分:-2)
也许你可以尝试这样的事情:
<div class="row col-md-12" [hidden]="messagehide">
{{_result.msgDesc}}
</div>
`this.messagehide=false;
this.messagealert();
messagealert(){
setTimeout(function() {
this.messagehide=true;
},3000);
}`
My settimeout function also didn't work . let me know.