像MDL這樣的庫通過等待頁面使用DOMContentLoaded事件加載,掃描頁面以獲取輸入元素等內容並使用JavaScript處理它們,以便它們可以注入與組件一起工作所需的零碎。這在靜態網站上可以正常工作,但DOMContentLoaded事件只會觸發一次,所以當Angular執行頁面轉換時,DOM不會知道MDL。
材料設計精簡版在其FAQ約using MDL on dynamic websites一節:
材料設計精簡版會自動註冊並呈現標記在網頁加載時MDL類的所有元素。但是,在您動態創建DOM元素的情況下,您需要使用upgradeElement
函數註冊新元素。這裏是你如何可以動態地創建與上一節中所示的漣漪一樣凸起按鈕:
<div id="container"/>
<script>
var button = document.createElement('button');
var textNode = document.createTextNode('Click Me!');
button.appendChild(textNode);
button.className = 'mdl-button mdl-js-button mdl-js-ripple-effect';
componentHandler.upgradeElement(button);
document.getElementById('container').appendChild(button);
</script>
當然,這可能也不太容易在你的情況下做的,因爲你必須手動查找每個新元素並在其上調用upgradeElement
。
通常,Angular不使用這種基於事件的DOM操作,而是使用指令來啓動DOM更改。考慮使用與Angular進行互操作的庫,而不是像Angular Material這樣的庫。
嗯我明白了,我認爲材料設計精簡版的作品像bootstrap ..但顯然沒有! :P非常感謝你Alexis! –