【发布时间】:2018-10-30 18:12:20
【问题描述】:
我有什么:两个组件,父级和子级。
父母
<UserName :name=user.name></UserName>
...
components: {UserName},
data() {
return {
user: {
name: '',
...
}
}
},
created() {
this.fetchUser()
console.log(this.user) //<- object as it is expected
},
methods: {
fetchUser() {
let that = this
axios.get(//...)
.then(response => {
for (let key in response.data) {
that.user[key] = response.data[key]
}
})
console.log(that.user) //<- object as it is expected
}
}
孩子
<h3 v-if="!editing" @click="edit">{{ usersName }}</h3>
<div v-if="editing">
<div>
<input type="text" v-model="usersName">
</div>
</div>
...
props: {
name: {
type: String,
default: ''
},
},
data() {
return {
editing: false,
usersName: this.name,
...
}
},
问题:即使name prop 设置为child,usersName 数据值为空。我检查了 Vue 调试扩展 - 同样的问题。
到目前为止我尝试了什么(没有任何帮助):
1)props: ['name']
2)
props: {
name: {
type: String
},
},
3)usersName: JSON.parse(JSON.stringify(this.name))
4) <UserName :name="this.user.name"></UserName>
P。 S. 当我将静态值从父级传递给子级时
<UserName :name="'just a string'"></UserName>
usersName 设置正确。
我还尝试将 name 属性更改为 foobar。我猜name 可能与组件name 完全冲突。但这也没有帮助。
【问题讨论】:
-
<UserName :name="user.name"></UserName>在将道具传递给孩子时,您是否错过了user.name周围的报价? -
@Psidom 嗯,我曾经做过其他类似的不带引号的组件。顺便说一句,我试过 wwith qoutes 而没有 - 结果相同。
-
如果您在使用
for循环更新后that.user在fetchUser中会怎样?你看到更新的user了吗? -
@Psidom 是的,我也用
console.log()更新了问题
标签: vue.js