有没有办法在路由更改时重新渲染组件?我正在使用 Vue Router 2.3.0,并且在多个路由中使用相同的组件。它第一次运行良好,或者如果我导航到不使用该组件的路线然后转到使用该组件的路线。我正在传递像这样的道具有什么不同
{
name: 'MainMap',
path: '/',
props: {
dataFile: 'all_resv.csv',
mapFile: 'contig_us.geo.json',
mapType: 'us'
},
folder: true,
component: Map
},
{
name: 'Arizona',
path: '/arizona',
props: {
dataFile: 'az.csv',
mapFile: 'az.counties.json',
mapType: 'state'
},
folder: true,
component: Map
}
然后我使用道具加载新地图和新数据,但地图与首次加载时保持一致。我不确定发生了什么事。
该组件如下所示:
data() {
return {
loading: true,
load: ''
}
},
props: ['dataFile', 'mapFile', 'mapType'],
watch: {
load: function() {
this.mounted();
}
},
mounted() {
let _this = this;
let svg = d3.select(this.$el);
d3.queue()
.defer(d3.json, `static/data/maps/${this.mapFile}`)
.defer(d3.csv, `static/data/stations/${this.dataFile}`)
.await(function(error, map, stations) {
// Build Map here
});
}
原文由 user1627827 发布,翻译遵循 CC BY-SA 4.0 许可协议
这个问题的替代解决方案在更多情况下处理这种情况。
首先,你不应该真的打电话给
mounted()
你自己。将您在mounted
中所做的事情抽象为您可以从mounted
调用的方法。其次,Vue 会尽可能重用组件,因此您的主要问题可能是mounted
只被触发一次。相反,您可以尝试使用updated
或beforeUpdate
生命周期 事件。这是一个 小例子,不是绘制 d3 的东西,而是展示了
mounted
和updated
在交换路由时如何被触发。打开控制台,你会看到mounted
只被触发过一次。