【发布时间】:2021-09-08 09:55:51
【问题描述】:
正如标题所说,我不太需要解决方案,但我不明白为什么会得到不想要的结果;
运行 v2 vue.js
我在单个组件文件中有一个 vue 组件。
基本上vue应该渲染数据(目前是从“excerciseModules”导入的,这是JSON格式的)。
IT 是动态的,因此它根据 url 路径确定要从 json 中提取什么,然后将其加载到页面中,但渲染是在此之前完成的,我不确定为什么。我创建了其他在概念上做同样事情的视图,它们工作正常。我不明白为什么会有所不同。
我选择了这种方式,因此我不必创建大量路线,而是可以在一个视图组件中处理逻辑(下面这个)。
问题是为什么数据加载为空(它在第一次加载时使用空的“TrainingModules”加载,然后加载“旧”数据。
示例 url 路径是“https...../module1”=页面加载为空
下一个
url 路径是 "https..../module 2" = 页面加载模块 1
下一个
url 路径是“https..../module 1”=页面加载模块 2
//My route
{
path: '/excercises/:type',
name: 'excercises',
props: {
},
component: () => import( /* webpackChunkName: "about" */ '../views/training/Excercises.vue')
}
<template>
<div class="relatedTraining">
<div class="white section">
<div class="row">
<div class="col s12 l3" v-for="(item, index) in trainingModules" :key="index">
<div class="card">
<div class="card-content">
<span class="card-title"> {{ item.title }}</span>
<p>{{ item.excercise }}</p>
</div>
<div class="card-action">
<router-link class="" to="/Grip">Start</router-link>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
console.log('script');
let trainingModules; //when initialized this is empty, but I would expect it to not be when the vue is rendered due to the beforeMount() in the component options. What gives?
/* eslint-disable */
let init = (params) => {
console.log('init');
console.log(trainingModules);
trainingModules = excerciseModules[params.type];
//return trainingModules
}
import { getRandom, randomImage } from '../../js/functions';
import { excerciseModules } from '../excercises/excercises_content.js'; //placeholder for JSON
export default {
name: 'excercises',
components: {
},
props: {
},
methods: {
getRandom,
randomImage,
init
},
data() {
return {
trainingModules,
}
},
beforeMount(){
console.log('before mount');
init(this.$route.params);
},
updated(){
console.log('updated');
},
mounted() {
console.log('mounted');
//console.log(trainingModules);
}
}
</script>
【问题讨论】:
标签: javascript vue.js vuejs2 vue-component vue-router