[英]Angular2 ngFor elements with Material Design Lite
TLDR; 在將元素注入DOM之后,需要調用componentHandler.upgradeElement。 我在過去使用的方法在下面的示例中描述。
編輯如果你想要一個聲明性的解決方案, 這種方法在這里看起來非常好,但我自己並沒有使用它。
我創建了一個包裝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);
}
}
然后在組件將元素注入DOM后調用服務的render函數。 在你的情況下,這是在*ngFor
這是一個非常人為的例子,但演示了“where”來調用render
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();
});
}
}
問題:MDL不會監視動態創建的DOM元素。
解決方案:MDL庫將componentHandler屬性添加到Window對象上。 在要動態添加元素的組件的ngOnInit()方法中執行以下代碼。
setTimeout(() => {
window['componentHandler'].upgradeDom();
}, 0);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.