当 Vuejs 中的 props 值发生变化时,DOM 不会更新 [英] DOM is not updating when props value changes in Vuejs

查看:151
本文介绍了当 Vuejs 中的 props 值发生变化时,DOM 不会更新的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个父母和一个孩子.在父级中,我将 3 个变量作为道具传递给子级.在 Child 中,我使用 watch() 来寻找变量的变化.当第一次创建孩子时,watch 按预期工作,但是当来自道具的数据更新时,孩子的 DOM 不会更新.正在寻找变量数据变化的 watch 函数根本没有运行.

这是我的代码.有点长,请耐心看完.

Parentcomponent.vue

 <模板><div><button type="button" v-on:click="LoadCatalog()">点击我!!<div v-if="displayCategoryList" class="row"><h3>选择类别男士</h3><select v-model="menCategory" v-on:change="passDataToChild()"><option v-for="item in categoryfordisplay.men" v-bind:key="item">{{ 物品 }}</选项></选择><h3>选择类别女性</h3><select v-model="WomenCategory" v-on:change="passDataToChild()"><option v-for="item in categoryfordisplay.women" v-bind:key="item">{{ 物品 }}</选项></选择>

<div v-if="displayData" class="row"><div v-for="data_to_show_on_mainpage 中的项目" v-bind:key="item" ><button v-on:click="newfunction(item.cat,item.gender)" ><img v-bind:src="item.data.image"></img><p >{{ item.cat }}</p>

<category-items v-if="displayCategoryData" v-bind:gender="gender" v-bind:catsgory="catsgory" v-bind:catlog="catlog" ></category-items>

</模板><脚本>从 'axios' 导入 axios从'./CategoryItems'导入CategoryItems导出默认{name: 'GetCategoryItemsAndDisplayOne',道具:['categoriesfordisplay','ismainpage','catalogselected'],成分:{类别项目,},数据(){返回 {IsMainPage_1 : "",data_to_show_on_mainpage : [],猫 :[],显示数据:真,男士类别:"",女性类别 : "",displayCategoryList: 真,displayCategoryData : false,CategoryFromImage : "",//dataSentToChild : {}性别 : "",猫科动物:",目录:"}},方法:{passDataToChild(){if(this.menCategory != ""){this.catsgory = this.menCategorythis.gender = "男人"this.catlog = this.catalogselectedthis.menCategory = ""}else if(this.WomenCategory != ""){this.catsgory = this.WomenCategorythis.gender = "女性"this.catlog = this.catalogselectedthis.WomenCategory = ""}this.displayData = falsethis.displayCategoryData = true},更改值(){this.data_to_show_on_mainpage = []},CatlogService(catlog_name,category,gender,mainpage){让 url = "http://localhost:5000/xyz/" + (this.catalogselected).replace(/'/g,"%27") +"/api/"+ (gender) + "/catalogvis/"+(类别)+"/items"axios.get(encodeURI(url)).then((resp)=>{var jsonData = {"data": resp.data.response.Results.results[0], "cat": category, "gender": 性别})this.data_to_show_on_mainpage.push(jsonData)}).catch(错误 => {console.log("我们得到一个错误,网址是" + url)控制台日志(错误);})},GetItemsToShowonMainPage(){this.changevalue()如果(this.categoriesfordisplay.men_for_display.length>0){for(let i =0;i<this.categoriesfordisplay.men_for_display.length;i++){let category = this.categoriesfordisplay.men_for_display[i].replace(/"/g,"%27");控制台日志(类别)this.CatlogService(this.catalogselected,category,'men',this.ismainpage)}}如果(this.categoriesfordisplay.women_for_display.length>0){for(让我= 0;我<this.categoriesfordisplay.women_for_display.length;i++){let category = this.categoriesfordisplay.women_for_display[i].replace(/"/g,"");this.CatlogService(this.catalogselected,category,'women',this.ismainpage)}}},加载目录(){this.displayCategoryData = falsethis.GetItemsToShowonMainPage()this.displayData = 真this.displayCategoryList = true},新功能(猫,性别){this.displayCategoryData = truethis.displayData = falsethis.catsgory = 猫this.gender = 性别this.catlog = this.catalogselected}},创建(){this.GetItemsToShowonMainPage()}}<风格></风格>

子组件 CategoryItems.vue 在下面