【发布时间】:2018-01-03 10:31:34
【问题描述】:
我正在使用 vueJs 和 laravel 开发我的第一个应用程序。
现在我对v-model 有疑问。
我有一个带有组件 Person 的页面,可以编辑或创建新的 Person。
所以我从 laravel 或 Model Person 或 new Person 的后端获取。
现在在我的前端,我通过 props 将数据传递给组件:
Page.blade.php
<Person :person-data="{!! jsonToProp($person) !!}"></Person>
(jsonToProp 转换模型来自 json 后端) 在这种情况下,我会返回没有属性的新模型,所以 $person 将是一个空对象。
Person.vue
<template>
<div>
<label for="name_p"> Name</label>
<input id="name_p" v-model="person.name" class="form-control" />
<button v-on:click="test()">test</button>
{{person.name}}
</div>
</template>
<script>
export default {
props: ['personData'],
mounted() {
},
data() {
return {
person: this.personData
}
},
methods:{
test(){
console.log(this.person.name);
}
}
}
</script>
现在,如果我使用模型 v-model="person.name" 更改输入,我会在模板中打印名称,但它不会改变。
但是,如果我单击 buttonit 控制台写入正确的值。
所以我读到更改模型值是异步的,那么当更改输入时如何渲染新模型?
【问题讨论】:
-
我建议您在
created中检查以确保您需要 的所有属性都在personData对象上,并且如果不是,使用$set初始化它们。 -
谢谢,但这意味着如果我有 30 个属性,我应该在创建时声明 30 个属性? ://
-
问题是您正在向空对象动态添加属性。您可以从已经具有这些属性的对象开始,或者如果您希望它们具有反应性,则可以正确添加它们。
-
好的,我明白了!谢谢!现在它可以工作了,我已经从后端创建了我的对象,并且在前端我已经拥有了正确的反应属性。谢谢!
标签: vue.js