赞
踩
父子组件之间数据交互有多种方式,这里简单介绍一下我用到的。
1、子组件中定义属性 ziData
- <template>
- <div>
- <h1>我是子标签</h1>
- <p>{{ziData}}</p>
- </div>
- </template>
-
- <script>
- export default {
- name: "ZiComponent",
- // 子组件属性,用于接收父组件数据, props是单向绑定
- props:[
- "ziData"
- ]
- }
- </script>
-
- <style scoped>
-
- </style>
2、父组件给子组件的 ziData 赋值。这里修改 text 中的内容同时会修改子组件中的 ziData,传值方式::zi-data="this.fuTextData",具体代码如下:
- <template>
- <div>
- <h1>我是父标签</h1>
- <input type="text" v-model="this.fuTextData"/>
- <ZiComponent :zi-data="this.fuTextData"></ZiComponent>
- </div>
- </template>
-
- <script>
- import ZiComponent from "@/views/ZiComponent";
- export default {
- name: "FuComponent",
- components:{ZiComponent},
- data() {
- return {
- fuTextData:null
- }
- }
- }
- </script>
-
- <style scoped>
-
- </style>
3、运行结果:
1、子组件代码如下:
- <template>
- <div>
- <h1>我是子标签</h1>
- <p>{{ ziData }}</p>
- </div>
- </template>
-
- <script>
- export default {
- name: "ZiComponent",
- data() {
- return{
- ziData: null
- }
- },
- methods: {
- setZiDataFormFu(msg) {
- this.ziData = msg
- }
- }
- }
- </script>
-
- <style scoped>
-
- </style>
2、父组件调用子组件中的方法,需要再导入子组时添加 ref 属性进行映射,调用方式:this.$refs.setZiData.setZiDataFormFu(this.fuTextData)。具体代码如下:
- <template>
- <div>
- <h1>我是父标签</h1>
- <input type="text" v-model="this.fuTextData" @change="setZiData"/>
- <ZiComponent ref="setZiData" ></ZiComponent>
- </div>
- </template>
-
- <script>
- import ZiComponent from "@/views/ZiComponent";
- export default {
- name: "FuComponent",
- components:{ZiComponent},
- data() {
- return {
- fuTextData:null
- }
- },
- methods:{
- setZiData(){
- this.$refs.setZiData.setZiDataFormFu(this.fuTextData)
- }
- }
- }
- </script>
-
- <style scoped>
-
- </style>
3、运行结果:
修改属性我这里采用的是调用父类型中的方法来修改的,所以和调用方法就一起讲了。
调用方法分为有返回值和无返回值两种情况。
1、调用父组件方法使用的是 this.$emit('ziDataChange', this.ziData),子组件代码如下:
- <template>
- <div>
- <h1>我是子标签</h1>
- <input type="text" v-model="this.ziData" @change="ziDataChange2"/>
- <p>{{ fuData }}</p>
- </div>
- </template>
-
- <script>
- export default {
- name: "ZiComponent",
- data() {
- return {
- ziData: null,
- fuData:null
- }
- },
- methods: {
- //没有返回值
- ziDataChange() {
- this.$emit('ziDataChange', this.ziData)
- },
- //有返回值
- ziDataChange2() {
- this.$emit('ziDataChange2', this.ziData,val=>{
- this.fuData=val
- })
- }
- }
- }
- </script>
-
- <style scoped>
-
- </style>
2、父组件需要添加子组件调用的事件:
<ZiComponent @ziDataChange2="ziDataChange2" ></ZiComponent>
代码如下:
- <template>
- <div>
- <h1>我是父标签</h1>
- <p>{{ this.fuData }}</p>
- <ZiComponent @ziDataChange2="ziDataChange2" ></ZiComponent>
- </div>
- </template>
-
- <script>
- import ZiComponent from "@/views/ZiComponent";
- export default {
- name: "FuComponent",
- components:{ZiComponent},
- data() {
- return {
- fuData:''
- }
- },
- methods:{
- ziDataChange(msg){
- this.fuData=msg;
- },
- ziDataChange2(msg,callback){
- this.fuData=msg;
- callback("我是父组件返回的信息:"+msg);
- }
- }
- }
- </script>
-
- <style scoped>
-
- </style>
3、运行结果:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。