为什么input框双向绑定的数据提示说在实例中没有定义
来源:1-5 项目作业
慕妹8003063
2021-03-24 14:49:39
在新建地址页,我写了如下的代码
<template>
<div class="top">
<div class="iconfont top__backIcon" @click="handleBackClick"></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回答
同学你好,解答如下:
1、地址数据没有保存在api/user/address里,是因为这个接口,只是一个地址,并没有实际的代码(假接口)。正常的接口,是需要后端人员开发的,虽然我们看到的就是一个地址,但是它也是需要后端人员用代码来实现具体功能的。所以此处,只要把页面搭建出来即可。
2、报错的意思是“属性city在渲染期间被访问,但未在实例上定义”,意思是html代码中使用了city,但是没有定义。
city属性是在下图中的变量data中定义的:

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



这样就可以消除警告了。
祝学习愉快!
相似问题
回答 1
回答 1