VUE组件系统极速入门1

如何你没有下面几个问题,那这篇文章真的是一无是处。

  1. 组件的创建与引用
  2. 父组件与子组件的交互
  3. 组件与组件间的交互

0.1 谈谈组件

我一开始是对组件有着深深的误解,我个人直接把web中的组件强行等于安卓中的button啊,listview啊,其实是错的。组件的划分,并没有那么严格,一个按钮可以是一个组件,页面的导航栏可以是一个组件。最好是一个页面中,只包含尽可能少的大组件,在大组件中,尽可以包含功能相近的小组件。
导航栏可以是一个大组件,内容可以是一个大组件,导航栏里又可以包含logo,具体栏目的导航。

上面都是我个人的理解。

1 组件的创建与引用

这里只谈单文件系统,一个.vue就是一个组件。
在单文件系统中,一个*.vue文件包含script、style、template标签。那么,如何在a.vue中,用b.vue中的组件呢?

import  view from 'xxx/xxx/xxx.vue'
import  Vue  from 'vue';
Vue.component('你喜欢的标签名',view) 

这样在a的template中,就可以这么使用b了

<template>
<你喜欢的标签名></你喜欢的标签名>
<template>

然后呢,由此,就会扯出一坨别的问题

  • 那怎么才能向子组件里传数据啊?
  • 那收到父组件的数据,子组件里要怎么用呢?
  • 那完成了一些操作,子组件要怎么报告给父组件呢?

答:我也不知道 见第二章。

2. 组件与组件间的交互

  • 那怎么才能向子组件里传数据啊? prop
  • 那收到父组件的数据,子组件里要怎么用呢? 插槽
  • 那完成了一些操作,子组件要怎么报告给父组件呢? 如果只是简单的,用自定义事情,复杂的,可以使用第三章提到的vuex。

其实官方文档都有这些的使用,地址点我。
但是我这个更是读完后的一个重点啊!我觉得我理一下更方便自己的理解与使用~

2.1 prop

实在是觉得官网的中文教程写的好,花10分钟就可以看完了,真的不想单纯的复制过来水,没意思。就再补充下单文件下的定义吧:

<template>
  <span>{{ message }}</span>  
</template>
<script>
export default { 
    // 声明 props
  props: ['message'],
  // 就像 data 一样,prop 也可以在模板中使用
}
<style >
</style>

2.2 插槽

补充一下:怎么理解插槽。
如果子组件要接收父组件的内容显示,要放在哪里显示呢?
子组件要怎么使用呢?
于是就引出了<slot>这个标签,见b.vue,它用作接收父组件中的数据
如a.vue(发数据,和slot无关)

<template>
<div>
  <h1>我是父组件的标题</h1>
  <my-component>
    <p>这是一些初始内容</p>
    <p>这是更多的初始内容</p>
  </my-component>
</div>
</template>

b.vue(收数据)

<div>
  <h2>我是子组件的标题</h2>
  <slot>
    只有在没有要分发的内容时才会显示。
  </slot>
</div>

最后就显示成了:

<div>
  <h1>我是父组件的标题</h1>
  <div>
    <h2>我是子组件的标题</h2>
    <p>这是一些初始内容</p>
    <p>这是更多的初始内容</p>
  </div>
</div>

slot还可以指定名字来接收数据。具名插槽
更详细内容看官网

2.3 事件

使用自定义事件做一些子组件与父组件的交互

  • on(eventName) 监听事件
  • emit(eventName) 触发事件

我把官网例子搞过来切割一下,并做点详细的解释吧~
父组件的template:

<div id="counter-event-example">
  <p>{{ total }}</p>
  <!--increment是事件的名字,而引号后面的incrementTotal是函数名-->
  <!-- button-counter就是一个子组件-->
  <button-counter v-on:increment="incrementTotal"></button-counter>
  <button-counter v-on:increment="incrementTotal"></button-counter>
</div>

可以看出,父组件订阅了increment这个事件,那么自然,字组件就一定触发了increment这个事件。
下面还是父组件的js:

el: '#counter-event-example',
  data: {
    total: 0
  },
  methods: {
    incrementTotal: function () {
      this.total += 1
    }
  }

子组件的template:

<button v-on:click="incrementCounter">{{ counter }}</button>

子组件的js:

data: function () {
    return {
      counter: 0
    }
  },
  methods: {
    incrementCounter: function () {
      this.counter += 1
      this.$emit('increment')
    }
  }

从代码中可以看出,子组件的click可以触发incrementcounter函数,在这个函数里,又发射了increment事件。
更多细节请参考官网

3 组件与组件之间的通迅

如果:

  • a.vue中的子组件想与b.vue中的子组件的通迅
  • a.vue想与b.vue中的子组件的通迅
  • a.vue中的子组件想与b.vue通迅
  • a.vue的子组件的子组件想与b.vue的子组件通迅
  • ......

想想就烦啊,这个时候,就要全局的vuex,就是状态管理~
这个坑值得另开一篇文章讲,等一个二。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,723评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,080评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,604评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,440评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,431评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,499评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,893评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,541评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,751评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,547评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,619评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,320评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,890评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,896评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,137评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,796评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,335评论 2 342

推荐阅读更多精彩内容