【发布时间】:2017-05-19 17:18:38
【问题描述】:
我面临两个组件 line-chart 和 bar-chart 的反应性问题
当我将复选框值链接更改为v-model="formChart.type 时,组件line-chart 和bar-chart 会自动重新渲染。
但是当我点击触发函数submitForm的button,然后点击generateChart()和resetTypeChart()时,这些组件不会重新渲染。
mounted() 函数未触发。
我真的不明白为什么会发生这种情况,因为我正在重置 type 和 show...。我尝试使用或不使用 Vue.set 都没有改变。
代码确实进入了resetTypeChart() 函数
组件并不总是重新渲染
<div class="chart-container">
<line-chart v-if="formChart.type === 'line_chart' && formChart.show" :chartData="dataChart" ref="lineChart"></line-chart>
<bar-chart v-if="formChart.type === 'bar_chart' && formChart.show" :chartData="dataChart" ref="barChart"></bar-chart>
</div>
用于更改图表类型的复选框
<el-radio-group size="small" v-model="formChart.type">
<el-radio-button label="line_chart"> Line Chart </el-radio-button>
<el-radio-button label="bar_chart"> Bar Chart </el-radio-button>
</el-radio-group>
生成图表的按钮
<el-button type="primary" size="large"@click="submitForm('formChart')">Generate</el-button>
submitForm(formName) {
this.$refs[formName].validate((valid) => {
this.generateChart();
this.resetTypeChart();
}
});
重置图表的功能(可以尝试)
resetTypeChart () {
const saveType = this.formChart.type;
this.formChart.type = '';
this.formChart.show = false;
Vue.set(this.formChart, 'type', saveType);
this.formChart.type = saveType;
this.formChart.show = true;
}
JSFIDDLE
- 切换到
Bar Chart,组件就生成了 - 点击
Generate,同时仍然在同一个单选按钮上。没有显示任何内容。
【问题讨论】:
-
您并没有真正改变
resetTypeChart中的任何内容。这并不是说 Vue 在你将 show 设置为 false 和返回 true 的时间之间跑掉并做任何事情。功能完成后,then 它将查看是否需要做某事,在这种情况下,我认为它不会看到任何更改。您能否提供一个工作示例,让我们可以看到您正在尝试解决的问题? -
我会尝试做一个例子,但这并不容易......你如何解释更改复选框以便
formChart.type在链接到@987654345时重新呈现组件@ 但不是当我在做this.formChart.type = ''然后`this.formChart.type = ''bar_chart"` -
因为 DOM 更新发生在 asynchronously。如果您只是单击单选按钮,那么 Vue 就有时间运行下一个异步 DOM 更新。但是更新不会在您的方法执行过程中运行。
-
我创建了一个
jsfiddle,比我预期的更简单。如果你切换radio button它会显示bar chart generated如果你点击生成它不会显示它
标签: javascript charts vue.js vuejs2