好吧,我现在讨论的这个问题有点复杂,但我会尽量弄清楚这里发生了什么。首先,我在我的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文件的方法。。。非常感谢。
正如我所说,您应该重新设计您的代码。脚本只评估一次,您对此无能为力,这是它应该工作的正确方式。
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 部件: /-对于主部件 /触点-用于触点组件 这里提供小提琴 多次单击“主页”链接会显示一条