我在来自undefined
ready()
我正在尝试将值从this.users.name
复制到this.userForm.name
我做错了什么?
个人资料用户组件
<template>
<input type="text" v-model="userForm.name">
</template>
<script>
export default {
props: ['users'],
ready() {
this.userForm.name = this.users.name;
console.log(this.users.name);
},
data: function () {
return {
userForm: {
name: '',
email: '',
errors: [],
},
}
},
}
</script>
HTML:
<profile-user :users="users"></profile-user>
编辑:
家长Vue
const app = new Vue({
el: 'body',
data: {
users: {}
},
ready: function() {
this.fetchUser();
},
methods: {
fetchUser: function() {
this.$http.get('/api/user').then(response => this.users = response.json());
}
},
});
答案 0 :(得分:2)
ready
。您需要使用mounted
代替ready()
从1.x迁移的参考:https://vuejs.org/guide/migration.html#ready-replaced
另一个潜在的问题:你的users
是一个数组项吗?如果它是一个对象,那么您可以考虑将其更恰当地命名为user_info
。但是,如果您将单个用户信息传递到users
并且上面有name
参数,那么您的代码应该在技术上有用。
如果您还没有vue-devtools,现在可能是在开发控制台中安装和调试的好时机:https://github.com/vuejs/vue-devtools
编辑:问题更改后修改
感谢您提供Parent组件。我想我现在可以看到这个问题:
假设您的$http
调用大约需要500毫秒才能完成。因此,父组件中的this.users
将在前500毫秒内未定义。但是那时你的子组件(profile-user
)已经创建了。并且它将尝试访问未定义的userForm.name
,直到服务器响应到来。
要避免此问题,您可以在profile-user
组件的模板中执行以下操作:
<template>
<div v-if="userForm">
<input type="text" v-model="userForm.name">
</div>
<div v-else>
Loading user data... Please wait
</div>
</template>
在您的开发环境中,服务器响应可能不会花费太多时间。但this.$http
调用仍然是异步的 - 只有在完全创建profile-user
组件后才会启动AJAX调用。