vue的组件就是一个个vue文件,里面包含3个部分:
template:html模版
style:css样式
script:js代码css
<template> <!-- 只能有一个根标签 --> <div> <p>{{msg}}</p> </div> </template> // lang表示所使用的CSS 预处理语言 // scoped表示里面的样式做用范围此局限在此组件中 <style lang="less" scoped> p{ color:green } </style> <script> export default{ data(){ return{ msg:'hello wolrd' } }, methods:{ } } </script>
在父组件的script标签中使用import引入相关组件的vue文件,并注册到components对象中html
// App.vue <script> import Hello from './components/Hello.vue' export default { data() { return { } }, components: { Hello } } </script>
以后能够以标签的形式在模版中使用此Hello组件vue
<template> <div> <Hello /> </div> </template>
(1)在父组件中把要传递的数据经过属性的形式绑定到子组件标签上
(2)在子组件中经过props属性接收父组件传递的数据(属性名是什么,接收的名称就是什么)npm
父组件:app
<template> <div id="app"> <h1>App组件</h1> <child :msg="msg" :person="person" :list="list"></Child> </div> </template> <script> import Child from "./components/Child.vue" export default { data() { return { msg:"我是父组件传递的值", person:{name:"张三丰",age:108}, list:['苹果','西瓜','桃子'] } }, components: { Child } } </script>
子组件:less
<template> <div> <P>{{msg}}</P> <p>{{person.name}}--{{person.age}}</p> <ul> <li v-for="(item,index) in list" :key="index">{{item}}</li> </ul> </div> </template> <script> export default { data () { return { } }, props:['msg','person','list'] } </script>
props接收父组件传递的数据有2种语法:简单语法和对象语法函数
//简单语法 props:['msg','person','list']
//对象语法,会检测传递值的数据类型 props:{ msg:String, list:Array, person:Object },
自定义事件能够将父组件的某个函数暴漏给子组件,子组件能够经过特定的方式来调用这个函数,并以传参的形式将子组件的数据传递给父组件
(1)在父组件中经过v-on的形式绑定一个自定义事件到子组件标签上,并设置自定义事件触发时的回调
(2)子组件经过this.$emit()方法来触发该自定义事件,并传入相应的参数给回调函数this
//父组件 //eventName为自定义事件的名称 //showMsg为mthods中定义的方法 <child @eventName="showMsg"></Child>
//子组件使用this.$emit()触发自定义事件 this.$emit('eventName',this.content)
还能够使用js语法来为自组件绑定自定义事件
语法:$on('事件名称',回调函数)code
//设定子组件标签的ref标识 <child ref="child"></Child>
//经过ref标识找到子组件,并为其添加子定义事件 mounted(){ this.$refs.child.$on('eventName',this.showMsg) }
经过第三方库来进行组件通讯,例如pubsub-js,使用这个库能够让任意两个组件进行通讯
订阅:PubSub.subscribe('事件名称', 回调函数);
发布:PubSub.publish('事件名称', 传递的参数);component
安装pubsub-js
npm install pubsub-js -S
引入pubsub-js (订阅和发布的组件都须要引入
import PubSub from 'pubsub-js'
组件1添加订阅(至关于添加事件监听)
<script> import PubSub from 'pubsub-js' export default { data () { return { content:"" } }, mounted(){ //在回调函数中添加订阅 PubSub.subscribe('eventName', (eventName,data)=> { //参数一是固定的,为事件名称 //参数二才是传递的参数 console.log(eventName,data) this.handleClick(data) }) }, methods:{ handleClick(data){ this.content = data } } } </script>
组件2发布消息(至关于触发事件监听)
<script> export default { data () { return { content:"我是传递的参数" } }, methods:{ handleClick(){ //发布(触发事件监听) PubSub.publish('eventName', this.content); } } } </script>