gpt4 book ai didi

使用 Material Design Lite 的 Angular2 ngFor 元素

转载 作者:太空狗 更新时间:2023-10-29 17:28:41 25 4
gpt4 key购买 nike

我正在努力让 Material Design Lite 组件通过 *ngFor 处理动态添加的元素。我知道我需要调用 componentHandler.upgradeElement,但是我应该把这个调用放在哪里?我正在尝试 thisthis指令,但它们似乎不起作用。具体来说,我需要在数组的每个项目上使用 mdl-menu。关于在哪里看的任何建议?

最佳答案

TLDR; 在将元素注入(inject) DOM 后,您需要调用 componentHandler.upgradeElement。下面的示例描述了我过去使用的一种方法。

编辑 如果你想要一个声明式的解决方案 this approach here好像挺不错的,不过我自己没用过。

我创建了一个包装 Material Lite componentHandler 的服务

import { Injectable } from '@angular/core';

export interface ComponentHandler {
upgradeDom();

}

declare var componentHandler: ComponentHandler;


@Injectable()
export class MaterialService {
handler: ComponentHandler;
constructor() {
this.handler = componentHandler;
}

// render on next tick
render() {
setTimeout(() => { this.handler.upgradeDom(); }, 0);
}

}

然后在组件将元素注入(inject) DOM 后调用服务的呈现函数。在您的情况下,这是在 *ngFor

之后

这是一个非常人为的例子,但演示了“在哪里”调用渲染

import { Component, OnInit } from '@angular/core';
import { DataService } from 'services/data.service';
import { MaterialService } from 'services/material.service';

@Component({
selector: 'app-thing',
templateUrl: `
<ul>
<li *ngFor="let item of data">
{{data}}
</li>
</ul>
`
})
export class ThingComponent implements OnInit {
data: string[]
constructor(
private service: DataService,
private material: MaterialService
) { }

ngOnInit() {
this.service.getData()
.subscribe(data => {
this.data = data;
this.material.render();
});
}
}

关于使用 Material Design Lite 的 Angular2 ngFor 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36261001/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com