当前位置:   article > 正文

Vue组件:子组件与父组件直之间传值与方法调用_修改data里面的数据 并父组件向子组件传值

修改data里面的数据 并父组件向子组件传值

父子组件之间数据交互有多种方式,这里简单介绍一下我用到的。

父组件向子组件传值

1、子组件中定义属性 ziData

  1. <template>
  2. <div>
  3. <h1>我是子标签</h1>
  4. <p>{{ziData}}</p>
  5. </div>
  6. </template>
  7. <script>
  8. export default {
  9. name: "ZiComponent",
  10. // 子组件属性,用于接收父组件数据, props是单向绑定
  11. props:[
  12. "ziData"
  13. ]
  14. }
  15. </script>
  16. <style scoped>
  17. </style>

2、父组件给子组件的 ziData 赋值。这里修改 text 中的内容同时会修改子组件中的 ziData,传值方式::zi-data="this.fuTextData",具体代码如下:

  1. <template>
  2. <div>
  3. <h1>我是父标签</h1>
  4. <input type="text" v-model="this.fuTextData"/>
  5. <ZiComponent :zi-data="this.fuTextData"></ZiComponent>
  6. </div>
  7. </template>
  8. <script>
  9. import ZiComponent from "@/views/ZiComponent";
  10. export default {
  11. name: "FuComponent",
  12. components:{ZiComponent},
  13. data() {
  14. return {
  15. fuTextData:null
  16. }
  17. }
  18. }
  19. </script>
  20. <style scoped>
  21. </style>

3、运行结果:

 父组件调用子组件方法

 1、子组件代码如下:

  1. <template>
  2. <div>
  3. <h1>我是子标签</h1>
  4. <p>{{ ziData }}</p>
  5. </div>
  6. </template>
  7. <script>
  8. export default {
  9. name: "ZiComponent",
  10. data() {
  11. return{
  12. ziData: null
  13. }
  14. },
  15. methods: {
  16. setZiDataFormFu(msg) {
  17. this.ziData = msg
  18. }
  19. }
  20. }
  21. </script>
  22. <style scoped>
  23. </style>

2、父组件调用子组件中的方法,需要再导入子组时添加 ref 属性进行映射,调用方式:this.$refs.setZiData.setZiDataFormFu(this.fuTextData)。具体代码如下:

  1. <template>
  2. <div>
  3. <h1>我是父标签</h1>
  4. <input type="text" v-model="this.fuTextData" @change="setZiData"/>
  5. <ZiComponent ref="setZiData" ></ZiComponent>
  6. </div>
  7. </template>
  8. <script>
  9. import ZiComponent from "@/views/ZiComponent";
  10. export default {
  11. name: "FuComponent",
  12. components:{ZiComponent},
  13. data() {
  14. return {
  15. fuTextData:null
  16. }
  17. },
  18. methods:{
  19. setZiData(){
  20. this.$refs.setZiData.setZiDataFormFu(this.fuTextData)
  21. }
  22. }
  23. }
  24. </script>
  25. <style scoped>
  26. </style>

3、运行结果:

 子组件修改父组件属性和调用父组件方法

修改属性我这里采用的是调用父类型中的方法来修改的,所以和调用方法就一起讲了。

调用方法分为有返回值和无返回值两种情况。

1、调用父组件方法使用的是 this.$emit('ziDataChange', this.ziData),子组件代码如下:

  1. <template>
  2. <div>
  3. <h1>我是子标签</h1>
  4. <input type="text" v-model="this.ziData" @change="ziDataChange2"/>
  5. <p>{{ fuData }}</p>
  6. </div>
  7. </template>
  8. <script>
  9. export default {
  10. name: "ZiComponent",
  11. data() {
  12. return {
  13. ziData: null,
  14. fuData:null
  15. }
  16. },
  17. methods: {
  18. //没有返回值
  19. ziDataChange() {
  20. this.$emit('ziDataChange', this.ziData)
  21. },
  22. //有返回值
  23. ziDataChange2() {
  24. this.$emit('ziDataChange2', this.ziData,val=>{
  25. this.fuData=val
  26. })
  27. }
  28. }
  29. }
  30. </script>
  31. <style scoped>
  32. </style>

2、父组件需要添加子组件调用的事件:

<ZiComponent @ziDataChange2="ziDataChange2" ></ZiComponent>

代码如下:

  1. <template>
  2. <div>
  3. <h1>我是父标签</h1>
  4. <p>{{ this.fuData }}</p>
  5. <ZiComponent @ziDataChange2="ziDataChange2" ></ZiComponent>
  6. </div>
  7. </template>
  8. <script>
  9. import ZiComponent from "@/views/ZiComponent";
  10. export default {
  11. name: "FuComponent",
  12. components:{ZiComponent},
  13. data() {
  14. return {
  15. fuData:''
  16. }
  17. },
  18. methods:{
  19. ziDataChange(msg){
  20. this.fuData=msg;
  21. },
  22. ziDataChange2(msg,callback){
  23. this.fuData=msg;
  24. callback("我是父组件返回的信息:"+msg);
  25. }
  26. }
  27. }
  28. </script>
  29. <style scoped>
  30. </style>

3、运行结果:

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/434661
推荐阅读
相关标签
  

闽ICP备14008679号