【问题标题】:Not loading external js on routing after refreshing the page it gets loaded in Angular 6刷新在 Angular 6 中加载的页面后,在路由上不加载外部 js
【发布时间】:2020-03-05 00:43:34
【问题描述】:

Before refreshing the page
After refreshing the page

自从过去 3 天以来,我一直面临这个问题,并尝试了很多方法,但没有一个适合我。

问题是我正在从 angular.json 加载外部 js。它是我使用的所有插件的通用 js,例如侧边栏、仪表板图表、菜单切换等。它在第一次页面加载时正常工作,但是当我通过组件到组件或模块到组件将页面路由时,js在我不刷新页面之前无法正常工作。

如果我在 chrome 的网络选项卡开发人员工具中打开脚本,我可以看到我的 js,但在我刷新页面后它仍然无法加载它可以工作顺利如我所愿。请指导我如何解决这个问题。 对不起语言,我希望你得到我的查询。 谢谢你

ngOnInit() {
 this.loadScript('../assets/js/scripts/pages/dashboard-lite.js');
}
public loadScript(url: string) {
    const body = <HTMLDivElement>document.body;
    const script = document.createElement('script');
    script.innerHTML = '';
    script.src = url;
    script.async = false;
    script.defer = true;
    body.appendChild(script);
  }

尝试使用此代码在 home 组件中加载所有 js,但仍然发生相同的情况,我必须刷新整个页面。尝试在 index.html 中使用 js,但没有成功。

【问题讨论】:

  • 您必须在app.component.ts 文件中链接这些脚本。在您的app.component.ts 中尝试此方法。
  • 感谢 Farhat 的回复,我已经尝试了所有方法,例如在 app.component.ts 中添加所有脚本,然后在 index.html 中添加,但它们都不起作用。
  • 然后尝试将此文件包含在angular.json 中。有关更多详细信息,请访问此link"src/assets/js/scripts/pages/dashboard-lite.js"
  • 如果你看到这是我当前的 angular.json "src/assets/vendors/js/ui/screenfull.min.js",
    "src/assets/vendors/js/extensions/ pace.min.js",
    "src/assets/vendors/js/charts/chart.min.js",
    "src/assets/js/core/app-menu.js",
    “src/assets/js/core/app.js”
    和dashboard-lte.js我只在主页组件中使用,因为我只想要主页上的图表,但仍然无法工作
  • 好的,现在只需在app.js 之后添加一个文件。 "src/assets/js/scripts/pages/dashboard-lite.js"。重新运行你的 Angular 项目并检查它是否有效。

标签: angular typescript angular6 angular-routing


【解决方案1】:

文件是在运行时加载的,因此 URL 应该是相对于应用程序的基本 URL,而不是相对于项目结构。这意味着 URL 应该是 assets/js/scripts/pages/dashboard-lite.js(即删除前导 ...)。

【讨论】:

  • 感谢回复,我的问题出在 app.js 和 app-menu.js。我有侧边栏,在侧边栏里面有子菜单和切换按钮来关闭和隐藏侧边栏。现在的事情是,当我登录并进入主页时,子菜单和切换按钮由于脚本而不起作用,一旦我刷新主页,它就会显示 dropdwon 箭头和切换按钮也可以正常工作。当我再次点击任何路线并进入主页时,该主页再次消失并刷新它。
  • 为了参考,我添加了截图,如果你看到带有红色标记的图像是在刷新页面后。首次加载时,没有图表或刷新后没有子菜单箭头。每当我进入另一个页面并回到家时,它就会消失。
  • "node_modules/jquery/dist/jquery.min.js", "node_modules/popper.js/dist/umd/popper.min.js", "node_modules/bootstrap/dist/js/bootstrap .min.js”、“src/assets/vendors/js/ui/perfect-scrollbar.jquery.min.js”、“src/assets/vendors/js/ui/unison.min.js”、“src/assets /vendors/js/ui/blockUI.min.js”、“src/assets/vendors/js/ui/jquery.matchHeight-min.js”、“src/assets/vendors/js/ui/screenfull.min.js ", "src/assets/vendors/js/extensions/pace.min.js", "src/assets/vendors/js/charts/chart.min.js", "src/assets/js/core/app-menu .js", "src/assets/js/core/app.js"
  • 这是我的 angular.json,它加载了所有的 js。当我转到 chrome 的网络选项卡开发人员工具并打开脚本时。它向我展示了我项目的所有 js,但仍然没有加载路由它仅在页面刷新时加载。
  • Angular 是一个单页应用程序,因此 index.html 中包含的脚本仅在启动时包含。在应用程序中导航时不会重新加载脚本是有道理的。如果您想在路由更改时重新运行脚本,那么您需要设置一个路由更改侦听器并调用该侦听器中的脚本。也许this SO answer 会帮助你。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
  • 1970-01-01
  • 2018-08-17
  • 2019-09-24
  • 2018-12-30
  • 2017-08-10
  • 2019-05-05
相关资源
最近更新 更多