牛骨文教育服务平台(让学习变的简单)
博文笔记

Vue子组件状态更新

创建时间:2017-12-11 投稿人: 浏览次数:1663

背景:在一个页面多次重复的使用同一个子组件(比如在列表里根据数据不同重复渲染该子组件)时,由于数据的改变子组件状态未能得到及时的更新

例子如下:

数据以表格的形式显示出来,循环的渲染若干行表格,七中有一列是引入子组件如下所示

<tr v-for="(item,index) in goods_list">
    <td>
        <edit-name :name="item.goods_alias"></edit-name>
    </td>
</tr>

子组件如下:

export default{
    props: ["name"],
    data() {
        return {
            oldName: this.name || "暂无",
        }
},

此时数据如下:

goods_list: [{goods_allias:"连衣裙"},{goods_allias:"上衣"},{goods_allias:"裤子"},]
此时渲染效果如下:

连衣裙
上衣
裤子

然后通过ajax请求得到另外一组数据,数据如下:

goods_list: [{goods_allias:"帽子"},{goods_allias:"手套"},{goods_allias:"袜子"},]

但是此时渲染效果如下:

连衣裙
上衣
裤子

表格看起来没有任何变化,这是因为Vue组件的高效利用,Vue并没有因为数据的变化而将整个子组件从头到尾的重新渲染一遍

而是将利用已有的组件,只更改数据,但是以当前没有检查到数据的变化,所以做如下更改

1.新增watch监听数据的变化

watch: {
    name(val){
        this.oldName = val || "暂无";
    }
}

此时随着数据的变化能够正常的渲染出列表














声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。