欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

荐 Vue的props和$emit总结

程序员文章站 2022-03-27 12:57:22
总结:被封装好的组件,才能被调用 组件如何封装,请查看文档组件封装好后,要进行全局调用,在components文件夹下创建index.js文件,用 Vue.component() 进行全局调用(如下图)注意:全局调用,是component。局部调用,是components如果组件引用了一个组件,那么该组件就叫父组件。被引用的这个组件就叫子组件下文中的父组件调用子组件,在父组件进行三个操作步骤:......

 

总结:

被封装好的组件,才能被调用                               组件如何封装,请查看文档 
组件封装好后,要进行全局调用,在components文件夹下创建index.js文件,用 Vue.component() 进行全局调用(如下图)
荐
                                                        Vue的props和$emit总结荐
                                                        Vue的props和$emit总结
 
注意:全局调用,是component。局部调用,是components
 
如果组件引用了一个组件,那么该组件就叫父组件。被引用的这个组件就叫子组件 
下文中的父组件调用子组件,在父组件进行三个操作步骤:
1、引入子组件import Login from '../components/Login/Login'
2、 局部调用(components)   
  components: {
    Login
  },
3、<template>内插入     <Login />
 

 

1、props                                                            【源代码在最后面】

父组件给子组件传值,子组件里的props接受传值(该值可以是数组,也可以是对象) 下图中的五个变量最好写同一个,不出错
父组件里调用封装好的子组件<Login :msg="msg" /> 中绑定属性 :msg(可以动态绑定,也可以静态绑定),这里是动态绑定。其父组件调用<login>组件里绑定的:msg  与它组件里的 props 对象里的msg保持一致  

荐
                                                        Vue的props和$emit总结荐
                                                        Vue的props和$emit总结荐
                                                        Vue的props和$emit总结

我们可以加入v-model进行数据绑定

荐
                                                        Vue的props和$emit总结

 

2、$emit                                            【源代码在最后面】                         

this.$emit('自定义事件名字','要传给父组件的内容'),在父组件中接收自定义事件

  <button @click="showMessage">子组件给父组件传参</button>
子组件内有一个触发函数(<button>元素里的 @click="showMessage"),当这个子组件加载到父组件上时,点击这个按钮,就会触发 showMessage()函数,这个函数执行this.$emit('showMsg',data),抛出一个data对象,被父组件接收。
 
很明显地看出,父组件中的<Login :msg='msg' @showMsg='showMsg' /> ,showMsg没有传参数
而methods方法体内,荐
                                                        Vue的props和$emit总结,showMsg()是有接收参数的。
 
 
荐
                                                        Vue的props和$emit总结荐
                                                        Vue的props和$emit总结

橙色部分事件名保持一致,这个showMsg是连接父子通信的桥梁

荐
                                                        Vue的props和$emit总结
 
 

下文:

props:父组件向子组件传值,先在父组件中动态绑定要传的值,(注意:如果传的值是字符串,可以不用加冒号动态绑定),然后在子组件中用props接受传过来的值

代码:
子组件
<template>
  <div>
  <h1>{{msg}}</h1>
  </div>
</template>
 
<script>
export default {
  props: {
    msg: {
      type: String,
      default: ''
    }
  }
}
</script>
 
 
父组件:
<template>
  <div>
    <Login :msg="msg" />
    <input type="text" v-model="msg">
    {{msg}}
  </div>
</template>
 
<script>
import Login from '../components/Login/Login'
export default {
  components: {
    Login
  },
  data() {
    return {
      msg: 'this is a World'
    }
  }
}
</script>
 
 

$emit:子组件向父组件传值,通过事件触发,先在子组件中注册点击事件,在事件中用 this.$emit('自定义事件名字','要传给父组件的内容'),在父组件中接收自定义事件

父组件:
<template>
  <div>
  <Login :msg='msg' @showMsg='showMsg' />
  </div>
</template>
 
<script>
import Login from '../components/Login/Login'
  export default{
    components: {
      Login
    },
    data(){
      return {
        msg:'This is a World'
      }
    },
    methods: {
      showMsg(data) {
        this.msg = data.num
        console.log(data.num)
      }
    }
  }
</script>
 
子组件:
<template>
  <div class="img-box">
    <div class="img-box1">
      <div>
        <button @click="showMessage('参数')">子组件给父组件传参</button>
        <h1>{{msg}}</h1>
      </div>
    </div>
  </div>
</template>
 
<script>
export default {
  props: {
    msg: {
      type: String,
      default: ''
    }
  },
  methods: {
    showMessage(val){
      const data = {
        num: val
      }
      this.$emit('showMsg',data)
    }
}
}
</script>
 
 
子组件也可以这样写:
<template>
  <div class="img-box">
    <div class="img-box1">
      <div>
        <img src="../../assets/logo.png" alt="Logo-pic" />
        <button @click="showMessage">子组件给父组件传参</button>
        <h1>{{msg}}</h1>
      </div>
    </div>
  </div>
</template>
 
<script>
export default {
  props: {
    msg: {
      type: String,
      default: ''
    }
  },
  methods: {
    showMessage(){
      const val = '参数'
      const data = {
        num: val
      }
      this.$emit('showMsg',data)
    }
}
}
</script>
 
 
 
 
 
 

本文地址:https://blog.csdn.net/weixin_45593968/article/details/107380910

相关标签: Vue知识点 vue