Vue.js入门(三)——关于组件以及组件通信

前言

学习过angular2都知道angular的核心是组件,通过组件之间可以通信,同样Vue.js组件也可以进行通信,只是和angular2有一些不一样!

内容

vue的每一个组件包括三个部分template,scripte,style.

使用组件两步操作:创建组件和注册组件。

1.创建组件:

在vue环境下创建一个组件非常容易,只需要在components文件夹下面创建一个带有后缀名的.vue的文件(这里以child.vue为例),快速编写组件只需要在文件中输入“scaffold”,然后enter一下就可以了。我上网搜索了一下,是脚本架的意思,他应该是写在了vscode的一个snippets(代码块)。参考的博客可以看这一篇([VS Code]跟我一起在Visual Studio Code 添加自定义snippet(代码段),附详细配置
这里写图片描述

2.注册组件:注册的方式有两种,一种是全局注册,一种是局部注册;

  • 全局注册:
    main.ts文件
import Vue from 'vue'
import App from './App'
import router from './router'
import subVue from './components/sub';
//全局注册方式-在任何地方都可以使用
Vue.component("subVue",subVue);

new Vue({
  el: '#app',
  router,
  template: '<App/>',
  components: { App }
})

全局注册的方式在任何vue组件页面中都是可以直接使用的,例如在app.vue中使用subVue直接在template中输入

<sub-vue></sub-vue> //其他地方不需要使用;
  • 局部注册(以app.vue中注册subVue)
<template>
  <div id="app">
    <sub-vue></sub-vue>
  </div>
</template>

<script>
//局部注册方式
import subVue from './components/sub';
export default {
  components:{
     subVue:subVue
  }

}
</script>
<style>
</style>

局部注册的方式只需要在本组件中使用,其他地方使用还需要再次的注册。


组件通信是相互的,但是组件通信的方式是不同的,在app.vue中注册sub.vue,使用sub.vue,那他们之间app.vue相当于是sub.vue的父组件,sub.vue是app.vue的子组件:

组件通信两种方式:

- 父组件向子组件通信采用:属性值方式
/**sub.vue文件下*/
<template id="header">
<div>我是{{textone}}儿子</div>
</template>
<script>
export default {
   props:['textone'] //准备接收父类传过来的值
}

/**%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/

/**sub.vue文件下*/
<template>
  <div id="app">
    <sub-vue textone="大"></sub-vue> <!--传送常量方式-->
    <sub-vue :textone="textbody"></sub-vue> <!--传送变量方式-->
  </div>
</template>
import subVue from './components/sub';
export  default {
  components:{
     subVue:subVue
  },
  data(){
    return{
      textbody:'测试'
    }
  },

}
</script>
- 子组件向父组件通信采用:动态监测方式

子组件向父组件传送消息,必须是动态,因为此时子组件已经初始化,活动中,子组件之前父组件就已经初始化了,父组件应该去实时监听一下子组件,而且子组件传送出消息,父组件还需要知道这个消息是传送给自己的,所以他们需要自己的一套联系方式,所以产生了connector对象:
connector.js:

import Vue from 'vue';
var connector=new Vue();
export default connector;

通过父子组件操作connector对象,父组件进行监听,on一下,子组件发出emit事件就会被父组件监听到:

/** sub.vue文件 */
<template>
  <div>
    我的儿子
<button @click="call">子类</button>

  </div>

</template>

<script>
import connector from '../connector.js';
export default {
  methods:{
   call(){
       connector.$emit('phone','马上到') //子组件发出事件
   }
  }
}
</script>

/**%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/

/**app.vue*/
<template>
  <div id="app">
    <!-- <img src="./assets/logo.png">
    <router-view/> -->
    <header-vue textone="大"></header-vue>
    <body-vue :textbody="textbody"></body-vue>
    <footer-vue></footer-vue>
    <button @click="listen">父类</button>

  </div>
</template>
<script>
import connector from './connector.js';
//引入组件:
import subVue from './components/sub.vue';
export  default {
  methods:{
    listen(){
      connector.$on('phone',function(msg){
        console.log(msg); //父组件监听事件
      })
    }
  }
}
</script>

在子向父传送事件的时候,必须父组件先监听connector对象,一旦发现子向监听的这个对象传送消息才能发现,就向打电话一样,你只有把手机放在身边,实时通过电话铃监听有没有人给你打电话,一旦有就接听到,如果你没有进行监听,手机静音就可能接收不到电话。

总结

组件开发已经接触过angular语言的程序员一点都不陌生,组件开发使前端开发更加高效,可以进行复用,减少了代码量,减少了网页加载的负担,提高了速度;同时组件之间的通信也让组件更加灵活。总之组件化开发都是angular2和vue.js核心思想。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 17
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值