javascript - 我无法访问我使用 ngFor 循环创建的 DOM 元素,并且我正在从服务中获取数据。角
问题描述
我正面临一个与 DOM Manipulation 相关的问题。我在我的组件中定义了一个名为颜色的数组,然后我调用服务方法并从服务器获取颜色数据,然后将它们分配到订阅方法中的颜色数组中。在使用 *ngFor 循环的 HTML 模板中,我正在显示颜色数组数据。现在我想为 HTML 元素添加一些动态类或样式,为此,我使用 ElementRef 来访问此元素,但我无法访问它,因为颜色数组最初是未定义的。现在让我附上代码...
@Component({
selector: 'app',
template: "<div><li class="color" *ngFor="let color of colors">{{color}}</li></div>",
styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit, AfterViewInit {
colors:any;
constructor(private elementRef:ElementRef, private renderer:Renderer2) {}
ngOnInit():void {
setTimeout(() => {
this.colors = ['red', 'yellow', 'green'];
}, 1000);
}
ngAfterViewInit():void {
const color = this.elementRef.nativeElement.querySelectorAll('.color');
console.log(color);
}
}
在这里,我在此代码中使用 setTimeout 函数,它的行为类似于服务,因为该服务需要一些时间从服务器获取数据,但在我的代码中,我使用的是服务。
现在,如果我在开发人员工具中打开控制台,那么我会得到 NodeList [],这意味着我无法访问 DOM 元素。我知道我无法访问 DOM 元素的问题,因为我用于访问 DOM 元素的代码在分配给颜色数组的数据之前运行,并且默认情况下或最初颜色数组未定义或为空。这就是我在控制台中获取 NodeList [] 的原因。但我无法理解如何解决这个问题?
提前致谢。
解决方案
你需要ngAfterViewCHecked
. 这将在每次 Angular 完成对组件及其子组件的更改检测运行时运行
其次,存在错误template
。如果您使用"
将终止字符串的所有双引号。您不需要对这样的所有属性使用单引号和双引号
'<div><li class="color" *ngFor="let color of colors">{{color}}</li></div>'
推荐阅读
- spring - 如何处理 Spring WebClient 获取 application/octet-stream 作为 body InputStream?
- sql - 格式化子查询以正确获取数据组
- django - 我想将参数 isloggedin 用户传递给 django 前端
- c# - 使用 GET 而不是 POST 来使用 SOAP Web 服务
- swift - 当键盘隐藏动画更改底部插图时,Swift UICollectionView Cell 错误地显示/滚动到视图中
- javascript - JavaScript:跳过 const 的最佳方法是什么
- flutter - Flutter/Firestore - 当一个聊天已经存在时创建另一个聊天
- docker - Jenkins 以并行步骤运行 docker save
- ubuntu - 无法安装php7.1-bcmath ubuntu 14.04
- php - 试图通过 PHP 文件修改 CronJob