vue 子组件改变父组件传来的参数

2019-10-10  本文已影响0人  蜗牛Coming

需求:
点击父组件上的一个按钮,弹出一个子组件弹窗,子组件上面有一个关闭按钮,点击关闭按钮子组件隐藏;
实现:
在子页面:

<template>
    <div class='son' v-if='isShow'>
        <p class='title'>
            <button @click='hidden'>关闭</button>
        </p>
        <p>this is son box</p>
        <p>{{infoooo}}</p>
    </div>
</template>
<style>
.son {
    position: absolute;
    top:0;
    left:0;
    width: 200px;
    height: 200px;
    background-color: pink;
}
.title {
    width:100%;
    height: 30px;
}
</style>
<script>
export default {
    props:['showFlag','infoooo'],
    data () {
        return {
            msg: 'this is list page',
        }
    },
    computed:{
        isShow:function(){
            return this.showFlag
        }
    },
    mounted(){
        // console.log('son')
    },
    methods:{
        hidden(){
            this.$emit('changeshowval',false);
        }
    }
}
</script>

父页面:

<template>
  <div class="hello">
    <button @click='showSONFn'>show son</button>
    <son :showFlag='showson' @changeshowval='changesonshow' :infoooo='infoooo'></son>
  </div>
</template>

<script>
import son from '../son/index.vue';
export default {
  name: 'HelloWorld',
  data () {
    return {
      showson: false,
      infoooo:'父组件传过来的信息'
    }
  },
  components:{
    son
  },
  methods:{
      showSONFn(){
          this.infoooo = '父组件传过来的信息22222222'
          this.showson = true;
      },
      changesonshow(val){
          console.log('父组件接收到的值',val);
          this.showson = val;
      }
  },
 
}
</script>

或者通过对象是引用类型的特点,另一种方式实现:

子页面:

<template>
    <div class='son' v-if='isShow'>
        <p class='title'>
            <button @click='hidden'>关闭</button>
        </p>
        <p>this is son box</p>
    </div>
</template>
<style>
.son {
    position: absolute;
    top:0;
    left:0;
    width: 200px;
    height: 200px;
    background-color: pink;
}
.title {
    width:100%;
    height: 30px;
}
</style>
<script>
export default {
    props:['showFlag'],
    data () {
        return {
            msg: 'this is list page',
        }
    },
    computed:{
        isShow:function(){
            return this.showFlag.val
        }
    },
    methods:{
        hidden(){
            this.showFlag.val = false;
        }
    }
}
</script>

父页面:

<template>
  <div class="hello">
    <button @click='showSONFn'>show son</button>
    <son :showFlag='showson'></son>
  </div>
</template>

<script>
import son from '../son/index.vue';
export default {
  name: 'HelloWorld',
  data () {
    return {
      showson: {
          val:false
        },
      infoooo:'父组件传过来的信息'
    }
  },
  components:{
    son
  },
  methods:{
      showSONFn(){
          this.showson.val = true;
      }
  }
}
</script>
上一篇 下一篇

猜你喜欢

热点阅读