我尝试使用$scope.$apply();在某些函数中,不会自动更新html(Exactly this but not with timeout)。
但是当我在函数末尾使用它时,得到的是Cannot find name '$scope'
,所以我假设$scope是我的模型的绑定(Because of this answer),但是当我用$scope替换绑定时,得到的是Property '$apply' does not exist on type 'string'
(绑定的变量是一个字符串)。
那么我该怎么做来更新html(主要问题)或者修复$scope.$apply()解决方案呢?
编辑:$scope和$apply()来自AngularJS,而不是Angular 2+。我在控制台中获得了正确的输出消息,但UI没有更新,我不明白问题所在。
<div class="col-sm home_title">
<div class="home_title_box" id="home_title_box"></div>
<h2 class="home_item">{{current_title}}</h2>
</div>
import { Component } from '@angular/core';
@Component({
selector: 'app-index',
templateUrl: './index.component.html',
styleUrls: ['./index.component.scss']
})
export class IndexComponent {
constructor() { }
titles_array: string[] = ["Doctor", "Medic", "Player"];
current_title: string = "None";
curr_title_i: number = 0;
update_title(el: any){
const resize_ob = new ResizeObserver((entries) => {
if(entries !== null){
if(entries[0].contentRect.width === 0){
for(this.curr_title_i; this.curr_title_i < this.titles_array.length;){
this.current_title = this.titles_array[this.curr_title_i];
console.log(this.curr_title_i); // correct output
console.log(this.current_title); // correct output
this.curr_title_i++;
if(this.curr_title_i >= this.titles_array.length){
this.curr_title_i = 0;
}
break;
}
}
}
});
resize_ob.observe(el);
}
ngOnInit(){
const elemTitleBox = document.querySelector("#home_title_box");
if(elemTitleBox !== null){
this.update_title(elemTitleBox);
}
}
}
2条答案
按热度按时间jslywgbw1#
您是否尝试过手动检测更改?
将以下代码添加到构造函数中:
constructor(private cdRef: ChangeDetectorRef) { }
并且在使用
update_title
方法之后,火灾探测发生了变化。jvlzgdj92#
https://dev.to/christiankohler/how-to-use-resizeobserver-with-angular-9l5
如果你遵循这个例子,你可能已经尝试过将宽度直接绑定到class属性,不幸的是模板不会重新呈现并保持初始值。
原因是Angular已经修补了大多数事件,但还没有修补ResizeObserver,这意味着这个回调函数在区域之外运行。
我们可以通过在区域中手动运行它来轻松地解决这个问题。