为什么input框双向绑定的数据提示说在实例中没有定义

来源:1-5 项目作业

慕妹8003063

2021-03-24 14:49:39

在新建地址页,我写了如下的代码

<template>
<div class="top">
<div class="iconfont top__backIcon" @click="handleBackClick">&#xe602;</div>
<div class="top__title">新建收货地址</div>
<div class="top__btn" @click="rightBtnClick">保存</div>
</div>
<div class="wrapper">
<div class="newAddress">
<div class="newAddress__item">
<span class="newAddress__item__text">所在城市:</span>
<input
class="newAddress__item__input"
type="text"
v-model="city"
placeholder="如北京市"
/>
</div>
<div class="newAddress__item">
<span class="newAddress__item__text">小区/大厦/学校:</span>
<input
class="newAddress__item__input"
type="text"
v-model="department"
placeholder="如理工大学国防科技园"
/>
</div>
<div class="newAddress__item">
<span class="newAddress__item__text">楼号-门牌号:</span>
<input
class="newAddress__item__input"
type="text"
v-model="houseNumber"
placeholder="A号楼B层"
/>
</div>
<div class="newAddress__item">
<span class="newAddress__item__text">收货人:</span>
<input
class="newAddress__item__input"
type="text"
v-model="name"
placeholder="请填写收货人的姓名"
/>
</div>
<div class="newAddress__item">
<span class="newAddress__item__text">联系电话:</span>
<input
class="newAddress__item__input"
type="text"
v-model="phone"
placeholder="请填写收货手机号"
/>
</div>
</div>
<Toast v-if="toastData.isShowToast" :message="toastData.toastMessage" />
</div>
</template>

<script>
import { reactive } from 'vue';
import { useRouter } from "vue-router";
import {post} from "../../utils/request"
import Toast, { useToastEffect } from "../../components/Toast";

const pageSkipEffect = (showToast) => {
const router = useRouter();
const data=reactive ({
city:'',
areadepartment:'',
houseNumber:'',
name:'',
phone:''
});
const handleBackClick = () => {
router.back();
};
const rightBtnClick=async()=>{
try{
const result=await post('/api/user/address',{
city:data.city,
department:data.department,
houseNumber:data.houseNumber,
name:data.name,
phone:data.phone
})
if(result.errno==0){
showToast("Save success!");
}
}catch(e){
console.log(e);
showToast("Create address fail!");
}
}

return { handleBackClick,rightBtnClick};
};
export default {
name: "CreateAddress" ,
components:{Toast},
setup() {
const { toastData, showToast } = useToastEffect();
const { handleBackClick,rightBtnClick } = pageSkipEffect(showToast);
return { handleBackClick,rightBtnClick,toastData, showToast};
},
};
</script>

点击保存后,程序执行没有问题(虽然不知何原因地址数据没有保存在api/user/address地址里),会弹出“保存成功”的窗口。但是,在Console窗口里却出了一堆提示:


runtime-core.esm-bundler.js?5c40:38 [Vue warn]: Property "city" was accessed during render but is not defined on instance. 

  at <CreateAddress onVnodeUnmounted=fn<onVnodeUnmounted> ref=Ref< null > > 

  at <RouterView> 

  at <App>


五个Property都有这样的提示,我不明白是什么意思?


写回答

1回答

好帮手慕久久

2021-03-24

同学你好,解答如下:

1、地址数据没有保存在api/user/address里,是因为这个接口,只是一个地址,并没有实际的代码(假接口)。正常的接口,是需要后端人员开发的,虽然我们看到的就是一个地址,但是它也是需要后端人员用代码来实现具体功能的。所以此处,只要把页面搭建出来即可。

2、报错的意思是“属性city在渲染期间被访问,但未在实例上定义”,意思是html代码中使用了city,但是没有定义。

city属性是在下图中的变量data中定义的:

http://img.mukewang.com/climg/605aea440901c24b06240273.jpg

所以需要把data导出去,再使用,如下:

http://img.mukewang.com/climg/605aea840937441906590315.jpg

http://img.mukewang.com/climg/605aea9209d8d42008910258.jpg

http://img.mukewang.com/climg/605aeaab09c5f57306160393.jpg

这样就可以消除警告了。

​祝学习愉快!

0

0 学习 · 15276 问题

查看课程