首页 前端知识 解决vue的警告附案例:Property “***“ was accessed during render but is not defined on instance.

解决vue的警告附案例:Property “***“ was accessed during render but is not defined on instance.

2024-02-17 09:02:40 前端知识 前端哥 37 227 我要收藏

在编写vue的时候遇到了这个警告:

 Propertywas accessed during render but is not defined on instance. 

是一个小问题,没有报错

总结了下面2种常见的简单解决方法:

1.原因:vue引入有问题,很多大佬都有说到这种解决方案

解决方法:在script标签中加入setup

<script setup>
...
</script>
复制

2.原因:警告的 "***"未设置初始值,这也是我的问题,但没有看到大家指出。

解决方法:给该属性添加一个初始值

<script >
var obj = {
data(){
return{
isAll: false, //初始值
...
}
}
}
复制

这个小问题不会报错,代码多的情况下挺难找的。

如果是vue引入整个有问题可能会直接报错,所以如果属性警告那大概率问题在于没有设置初始值。细心一点就好。

希望对大家有帮助~

个人案例:用vue实现购物车金额计算和动态增减删除

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<link rel="stylesheet" href="">
<style>
li{
display:flex;
justify-content: space-around;
padding: 10px;
}
li img{
width:100px;
}
</style>
<script type="text/javascript" src="../lib/vue.next.js"></script>
<!--!!上一行记得改成自己的vue.next.js路径!!--!>
</head>
<body>
<!-- 功能1:勾选 功能2:计算总金额 -->
<div id="box">
<input type="checkbox" v-model="isAll" @change="handleAllChecked"/>全选/全不选<!-- 绑定一个布尔值,change事件在他改变后才获取数值,正确-->
<ul>
<li v-for="(item,index) in datalist" :key="item.id"><!-- v-for遍历 -->
<input type="checkbox" v-model="checkList" :value="item" @change="handleItemChecked"/><!-- 商品选择:双向数据绑定框 -->
<img :src="item.pic"/><!-- 商品图片 -->
<!-- :src动态绑定 -->
<div><!-- 名称+价格 -->
<div>{{item.name}}</div>
<div style="color: #c03bbe;">${{item.price}}</div>
</div>
<div><!-- 数量 -->
<button @click="item.number--" :disabled="item.number===1">-</button> <!-- 商品数量不能小于1 -->
<span>{{item.number}}</span>
<button @click="item.number++" :disabled="item.number===item.limit">+</button><!-- 商品数量不能大于限购数量 -->
</div>
<div><!-- 删除商品按钮 -->
<button @click="handleDeleteClick(index,item.id)">delete</button>
</div>
</li>
</ul>
<div>总金额:${{sum()}}</div>
{{checkList}}
</div>
<script>
var obj = {
data(){
return{
isAll: false, //初始值
checkList:[],//勾选的购物车数据
datalist:[{//所有的购物车数据
name:"商品1",
price:10,
number:1,
id:1,
limit:10,//限购
pic:" https://img1.baidu.com/it/u=1967065197,716971243&fm=253&app=138&size=w931&n=0&f=JPEG&fmt=auto?sec=1677344400&t=8a1882c11a23d159b36c8912723d67b9"
},
{
name:"商品2",
price:12,
number:2,
id:2,
limit:5,
pic:"https://img1.baidu.com/it/u=1967065197,716971243&fm=253&app=138&size=w931&n=0&f=JPEG&fmt=auto?sec=1677344400&t=8a1882c11a23d159b36c8912723d67b9"
},
{
name:"商品3",
price:45,
number:3,
id:3,
limit:10,
pic:"https://img1.baidu.com/it/u=1967065197,716971243&fm=253&app=138&size=w931&n=0&f=JPEG&fmt=auto?sec=1677344400&t=8a1882c11a23d159b36c8912723d67b9"
},
{
name:"商品4",
price:17.5,
number:1,
id:4,
limit:5,
pic:"https://img1.baidu.com/it/u=1967065197,716971243&fm=253&app=138&size=w931&n=0&f=JPEG&fmt=auto?sec=1677344400&t=8a1882c11a23d159b36c8912723d67b9"
}
]
}
},
methods:{
sum(){
var total = 0
//累加计算checkList数组中每一项的:价格*数量
this.checkList.forEach(item => {
total+=item.price*item.number
})
return total
},
handleDeleteClick(index,id){
//删除datalist靠index索引
this.datalist.splice(index,1)//splice(从几号索引开始删除,删除几个)
//删除checklist靠匹配id
this.checkList = this.checkList.filter(item=>item.id!==id)//过滤:更新checkList,返回剩下的未被过滤掉的元素(id与被删商品id不符的)
//状态同步,完善全选删除状态反馈
this.handleItemChecked()
},
//比较两数组长度,长度相等为全选
handleAllChecked(){
if(this.isAll){
this.checkList = this.datalist
}else{
this.checkList = []
}
},
//每项选择:选中为全选,取消为全不选
handleItemChecked(){
if(this.checkList.length===this.datalist.length){
this.isAll = true
}else{
this.isAll = false
}
}
}
}
var vm = Vue.createApp(obj).mount("#box")//引入vue
</script>
</body>
</html>
复制

转载请注明出处或者链接地址:https://www.qianduange.cn//article/2227.html
标签
评论
还可以输入200
共0条数据,当前/页
发布的文章

jquery.动画和事件

2024-03-03 11:03:13

jQuery位置方法

2024-03-03 11:03:13

jQuery中val()和text()的区别

2024-03-03 11:03:11

jquery实现甘特图时效管理

2024-03-03 11:03:47

django之 echarts数据可视化

2024-03-03 11:03:26

大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!