【问题标题】:Delay and Manually initialize mdl materialLayout延迟并手动初始化 mdl materialLayout
【发布时间】:2026-01-24 17:35:01
【问题描述】:

奇怪的错误.....

  • 我有一个竞争条件,我的 headerdrawer 的 angularJS 指令正在编译 material-design-lite 初始化布局。

  • 似乎只有在我关闭 wifi 并离线工作时才会发生这种情况。不需要远程资源,尽管 google 标签管理器和 facebook connect 插件在网络选项卡中失败。

问题

  1. 我可以延迟 MDL 的自动初始化(我看到发生在页面的 onload 上吗?
  2. 我是否可以手动重新初始化 mdl 布局,以便它重新正确构造抽屉按钮等?
  3. 有人知道为什么离线会导致任何渲染/javascript 问题吗?

我已经尝试过window.componentHandler.upgradeAllRegistered(),但这并没有重新初始化布局

【问题讨论】:

  • 当您的 Angular 已将 DOM 完全提交给浏览器时,为什么不只是 componentHandler.upgradeElement(document.body)

标签: javascript angularjs material-design material-design-lite


【解决方案1】:

如果其他人遇到这种情况,我是这样解决问题的(带角度的 mdl 竞争条件):

  1. 加载 header 指令后加载 material.js 库
  2. 等待window.componentHandler
  3. 然后运行window.componentHandler.upgradeAllRegistered();

完整代码(放在头指令中)

function materialize(){
        var script = document.createElement('script');
        script.src = 'assets/js/material.js';
        document.body.appendChild(script);
        (function upgrade(){
            if (!window.componentHandler){
                return $timeout(upgrade, 200);
            }
            $timeout(window.componentHandler.upgradeAllRegistered);
        })();
}

【讨论】:

  • 冠军!! SharePoint 也有同样的问题