我正在测试vue.js
的组件,我遇到了在子项更改时更新父组件的问题。
我使用vue-cli(webpack)生成了项目,并且我使用的是具有自己的.vue
文件的组件。
代码:
App.vue
<template>
<div id="app">
<h2>{{ title }}</h2>
<div class="pie">
<change-title :title="title"></change-title>
</div>
</div>
</template>
<script>
import ChangeTitle from './components/ChangeTitle'
export default {
components: {
ChangeTitle
},
data () {
return {
title: 'The title'
}
}
}
</script>
ChangeTitle.vue
<template>
<div>
<input v-model="title">
</div>
</template>
<script>
export default {
props: ['title']
}
</script>
问题
当应用程序加载正确显示title属性时,但当我键入<change-title>
组件字段时,直接在App.vue
文件中的title属性不会更新。
它还向我显示以下消息:
[Vue警告]:避免直接改变道具,因为该值将是 父组件重新渲染时会覆盖。相反,使用 基于道具价值的数据或计算属性。支持存在 变异:“标题”
将子组件与其父组件连接的方法是什么?
谢谢..
答案 0 :(得分:2)
首先,您需要制作v-model
的副本并放入数据,然后使用Vue
绑定到该数据,因为created
不希望您直接更改道具在组件内部,因此,在prop
钩子内只需将export default{
props: ['title'],
created() {
this.val = this.title
},
data() {
return {
val: ''
}
}
}
复制到数据中的属性:
v-model
然后使用<input v-model="val">
绑定到它:
watcher
下一步是在值发生变化时将数据发送回父级,您可以在val
内执行此操作,只需在change-title
组件中$emit
进行观察即可 watch: {
val() {
this.$emit('title-updated', this.val);
}
}
1}}它:
<change-title :title="title" @title-updated="updateTitle">
然后你就可以在你的父母那里听这个事件:
updateTitle
最后添加title
方法来更改父级中的 methods: {
updateTitle(title) {
this.title = title;
}
}
:
$controller = new AnetController\CreateCustomerProfileController($request);
$response = $controller -> executeWithApiResponse(\net\authorize\api\constants\ANetEnvironment::PRODUCTION);
$rsp = $response -> getMessages() -> getMessage()[0] -> getCode();
这是整个事情的JSFiddle:https://jsfiddle.net/90ws3sL6/