当前位置: 首页 > 知识库问答 >
问题:

Vue JS路由器组件-在路由之间导航后无法重用使用webpack导入的JS文件

冉锋
2023-03-14

好吧,我现在讨论的这个问题有点复杂,但我会尽量弄清楚这里发生了什么。首先,我在我的webpack应用程序中使用了最新的Vue和Vue路由器。

这是一个名为

CP.vue

<template>
...
</template>

<script>
    export default {
        data() {
            return {
            }
        },
        created() {
            Load();
            const JS = () => import('cp.js');
            JS();
            console.log("created");

        },
        mounted() {
            Show();
        },
        destroyed() {
            console.log("destroyed");
        },
        methods: { }

    }
</script>

这就是cp.js的开始

cp.js

console.log("cp created");

// Bootstrap Datepicker
import '../../../node_modules/bootstrap-datepicker/dist/css/bootstrap-datepicker.css';
// Switchery
import '../../../node_modules/mohithg-switchery/switchery.css';
// TreeView CSS 
import '../../../node_modules/patternfly-bootstrap-treeview/dist/bootstrap-treeview.css';
// Datatables CSS 
import '../../../node_modules/datatables.net-bs4/css/dataTables.bootstrap4.css';
// Datatables - Button CSS 
import '../../../node_modules/datatables-buttons/css/buttons.dataTables.scss';
/////////////////////////// Toastr - for warnings
import '../../../node_modules/toastr/build/toastr.min.css';
////////////////////////// ScrollBar 
import '../../../node_modules/perfect-scrollbar/src/css/main.scss';
// CSS
import '../../scss/pages/cp.scss';

.....
.... more JS code which never works the second time
.....

/*----------  DatePicker  ----------*/

const datePicker = $('#date-range').datepicker({
    toggleActive: true,
    format: 'dd/mm/yyyy',
    autoclose: true,
    daysOfWeekHighlighted: "0,6",
    weekStart: 1,
    endDate: 'today',
    maxDate: 'today',
    startDate: '01/01/2014'
});
/*----------  ScrollBar  ----------*/

$('#tree-container').perfectScrollbar();
// there's more, but it's a long file so I cut it short

^这里的模块加载了延迟加载。当我第一次导航到CP.vue的路径时,模板会显示出来,JS文件可以正常加载。您可以在控制台中看到“cp已创建”。然而,当我移动到vue路由器中另一个组件的路径,然后返回到/cp时,cp.js中的所有功能(日期选择器等)都不再工作,而它第一次导入的样式仍然完好无损,并且是控制台。log(“cp created”)甚至不运行,这意味着它只加载cp.js一次,当您重新导航到/cp时,脚本的功能就消失了。所以你必须刷新页面才能再次工作,这正是我不想做的,因此我使用VueRouter。我试着在互联网上搜索有这个问题的人,尝试了“vue插件加载脚本”之类的插件,尝试卸载脚本,然后在创建和销毁组件时再次加载,但什么都不起作用。只有使用此代码的方法

const JS = () => import('cp.js');
JS();

甚至加载js文件都有效,因为“vue plugin load script”之类的插件无法识别esx语法。

当我在vue router中的组件之间导航时,是否有人知道每次重新创建组件时可以重用cp.js的方法?或者是另一种加载JS文件的方法。。。非常感谢。

共有1个答案

曹浩
2023-03-14

正如我所说,您应该重新设计您的代码。脚本只评估一次,您对此无能为力,这是它应该工作的正确方式。

cp.js:

export function initComponents()  {
  const datePicker = $('#date-range').datepicker({
    toggleActive: true,
    format: 'dd/mm/yyyy',
    autoclose: true,
    daysOfWeekHighlighted: "0,6",
    weekStart: 1,
    endDate: 'today',
    maxDate: 'today',
    startDate: '01/01/2014'
  });
  /*----------  ScrollBar  ----------*/

  $('#tree-container').perfectScrollbar();
}

从您的组件:

import( /* webpackChunkName: "cp.js" */ 'cp.js').then(exports => {
  exports.initComponents();
});

编辑:在自定义文件中定义组件ID也是一种不好的做法。我建议使用vue-datepicker。他们有很多好吧,如果您仍然想使用自定义datepicker,您可以将htmlNode作为参数传递给您的initComponent函数。但我想最好的选择是创建名为datePicker的组件,并将所有js代码放入create方法中。您还可以将css文件打包到范围css部分中,而不是全局css。

 类似资料:
  • 在导航到我拥有的某些路由之前,尝试找出获取某些数据的最佳方法。 我的路线是: /messages, /posts /dashboard我想获取一些数据,同时显示一个旋转器。 Vue路由器文档建议在路由器之前使用,在导航之前获取 但我的问题是,我必须在所有三个视图组件中实现这个获取逻辑吗?由于提取的是相同的数据,我不想在每个组件中重复逻辑。 在我的根组件中没有调用beForeRouteEnter,在

  • 路由管理 路由管理主要是为了实现页面切换。Flutter中,页面称为路由Router,由导航器Navigator控制,导航器维护一个路由栈,路由入栈(push)则打开新页面,路由出栈(pop)则关闭页面。Flutter中的页面切换就是导航器指挥路由入栈出栈的过程,即:Navigator来push/pop页面Route的过程。写写常用场景的demo。 页面跳转 核心方法:Navigator.push

  • 问题内容: 我正在尝试使用ReactJS创建一个简单的Webapp,我想使用React-Bootstrap提供的。 我创建了一个文件,其中包含一个类,用于将和和路由与文件分开。但是,这两个部分似乎都不起作用。当我加载页面时,它只是空的,没有导航栏。谁能发现一个错误? Navigation.js: App.js: 我尝试使用已经包含的from ,这导致了相同的结果。 为了完整性,Page.js: 问

  • 我正在使用Vue router指向src文件中名为components的文件夹中的不同组件,这很奇怪,但所有组件中的模板都是相同的,我导入了文件并以完全相同的方式定义了路由,当然除了我的主文件中的确切组件文件名之外。js文件 这是我的main.js档案 奇怪的是,它们都展示了两个组成部分,家。vue和聚会。vue,其余的根本不显示。有人能帮忙吗?同样,组件模板本身是相同的,以防您漫游,提前感谢)

  • 我目前有一个react应用程序,我正在工作,路由是错误的。我以前已经像这样设置了react应用程序及其路由,但是当试图路由到“details”组件时,只有url发生了变化,但是组件没有加载。多一双眼睛就能看到我错过了什么。我将路线设置为: < li>index.js: 根“/”路径组件加载,但我无法获取详细信息组件组件在使用history进行路由时呈现.

  • 嗨,我不确定这是一个期望的行为还是一个bug。 这是一个空的create react应用程序示例,带有 版本: 反应:^16.13.1, react-dom:^16.13.1, react-router-dom:^5.2.0, 反应脚本:3.4.1 部件: /-对于主部件 /触点-用于触点组件 这里提供小提琴 多次单击“主页”链接会显示一条