VUE的父子组件内容获取和事件绑定代码

父网页代码

<template>
  <div class="hello">
   <h1 :class="ff" @mouseover="add()">这是首页</h1>
   <div>
   <aaa :ttt="test" @aa="funck()"></aaa>
   </div>
   </div>
</template>

<script>
import COPY from './COPY.vue'
export default {
  name: 'HelloWorld',

  data () {
    return {
      test:'这是父组件的变量',
      ff: ''
    }    
  },

  methods:{
    funck: function(value) {
     this.ff='f'
    },
    add: function() {
      this.test='f'
    }
  },

  components: {
    aaa:COPY
  }
}
</script>

<style scoped>
  .f{
    background-color: aqua
  }
</style>

子网页代码

<template>
  <div class="hello">
   <h1 :class="ttt">这是一个可以COPY的固定页面 </h1>
   <p @click="fuck()"> {{ttt}}</p>
   <div @click="kkk()" :class="ttt">什么鬼巴西龟</div>
   </div>
</template>

<script>
export default {
  name: 'COPY',

  data () {
    return {
      ooo:'这是子组件的变量'
    }    
  },

  props:{
    ttt:{
      default:0,
      type:Number
    }
  },
  
  methods:{
    fuck: function() {
      this.$emit('aa')
    },
    kkk: function() {
      this.$emit('mouseover')
    }
  }
}
</script>

<style scoped>
  .f{
    background-color:cadetblue
  }
</style>

详细说明

要将父组件中的变量传递给子组件:在子组件中完成props方法中的变量命名后

例:父组件中--><div>
             <aaa :ttt="test">这里的ttt就是子组件的变量命名,获取父组件的test变量</aaa>
           </div>

子组件中-->props:{       固定写法
        ttt:{             也可以是空对象,以下的变量值都不写
              default:0         设置默认值default为0
              type:Number       这里一旦定义值的类型,如果不是Number等就会报错
        }
      }
      <p> {{ttt}}</p>       这里输出ttt的值,也就是父组件中的test值

 

要将子组件的变量传递给父组件:在子组件中准备好触发事件和方法

例:子组件中--><p @click="fuck()">当点击这里后触发方法fuck()</p>
      methods:{
    
        fuck: function() {
      
        this.$emit('bb',this.ccc,this.aaa)     命名一个事件名bb,同时带上当前网页的变量ccc和aaa
          }
   父组件中--><p @bb="test()"></p> 跟子组件事件命名相同,子组件触发事件后运行这里的test()方法
      methods:{

        test: function(value1,value2) {     命名value变量1和2,如果子组件参数多个则命名多个,顺序要对应

        console.log(value1)                 输出value变量,即子组件的变量ccc 

        this.ff=value2                      改变当前页面的变量ff的值等于带过来的参数aaa
          }

要点击子组件的内容触发父组件的事件:在methods中命名一个变量和方法后,固定写法this.$emit

例:子组件中--><p @click="add()">当点击这里后触发方法add()</p>
       methods:{
    
        add: function() {
      
       this.$emit('aa')      命名一个事件名aa,方法运行后到父组件找到相同的事件名
          }
    
    父组件中--><p @aa="funck()"></p> 跟子组件事件命名相同,子组件触发事件后运行这里的funck()方法
       methods:{
    
        funck: function() {
      
        this.ff='改变的值'       改变当前页面的变量ff的值
          }

 

posted @ 2018-01-01 11:45  爱上大树的小猪  阅读(2057)  评论(0编辑  收藏  举报