Vue全家桶之组件化开发

Vue全家桶之组件化开发

一、组件化开发思想

1.现实中的组件化思想体现-模块化手机

2.编程中的组件化思想体现-各种区块

3.组件化规范:Web Components通过创建封装好功能的定制元素解决上述问题。

我们希望尽可能多的重用代码

自定义组件的方式不太容易(html,css,js)

多次使用组件可能导致冲突

二、组件注册

1.全局组件注册语法

Vue.component(组件名称,{

    data: 组件数据,

    template: 组件模块内容

})

注册一个名为button-counter的新组件

Vue.component('button-counter'{

    data: function () {

        return {

            count:0

        }

    },

    template: '<button v-on:click="count++">点击了{{count}}次</button>

})

2.组件用法

<div id="app">

    <button-counter></button-counter>

</div>

3.组件注册注意事项

①data必须是一个函数

分析函数与普通对象的对比

②组件模块内容必须是单个根元素

分析演示实例的效果

③组件模块内容可以是模板字符串

模板字符串需要浏览器提供支持(es6语法)

④组件命名方式

短横线方式

Vue.component('my-component',{/*...*/})

驼峰方式

Vue.component('MyComponent',{/*...*/})//只能在模板字符串中使用,如果想在html中使用需要转换成短横线

4.局部组件注册

var ComponentA = { /*...*/}

var ComponentB = { /*...*/}

new Vue ({

    el: '#app'

    components : {

        'component-a' : ComponentA,

        'component-b' : ComponentB

    }

})

三、Vue调试工具

1.调试工具安装

2.调试工具用法

四、组件间数据交互

1.父组件向子组件传值

①组件内部通过props接收传递过来的值

Vue.component('menu-item',{

    props: ['title'],

    template: '<div>{{title}}</div>

})

②父组件通过属性将值传递给子组件

<menu-item title="来自父组件的数据"></menu-item>

<menu-item :title="title"></menu-item>

③props属性名规则

在props中使用驼峰形式,模板中需要使用短横线的形式

字符串形式的模板中没有这个限制

Vue.component('menu-item',{

      //在js中是驼峰式的

  props : [menuTitle'],

  template: '<div>{{menuTitle}}</div>'

})

在html中是短横线方式的

<menu-item menu-title="nihao"></menu-item>

④props属性值类型

字符串String

数值Number

布尔值Boolean

数组Array

对象Object

2.子组件向父组件传值

①子组件通过自定义事件向父组件传值

<button v-on:click='$emit("enlarge-text") '>扩大字体</button>

②父组件监听子组件的事件

<menu-item v-on:enlarge-text='fontsize += 0.1'></menu-item>

③子组件通过自定义事件向父组件传递信息

<button v-on:click='$?emit("enlarge-text",0.1)'>扩大字体</button>

④父组件监听子组件的事件

<menu-item v-on:enlarge-text='fontSize += $event'></menu-item>

3.非父子组件间传值

①单独的事件中心管理组件间的通信

var eventHub = new Vue()

②监听事件与销毁事件

eventHub.$on('add-todo',addTodo)

eventHub.$off('add-todo')

③触发事件

eventHub.$emit('add-todo',id)

五、组件插槽

1.组件插槽的作用

父组件向子组件传递内容

2.组件插槽基本用法

①插槽位置

Vue.component('alert-box',{

    template:

      <div class="demo-alert-box">

          <strong>Error!</strong>

          <slot></slot>

      </div>

})

②插槽内容

<alert-box>Something bad happened.</alert-box>

3.具名插槽用法

①插槽定义

<div class="container">

    <header>

        <slot name="header"></slot>

    </header>

    <main>

      <slot></slot>

    </main>

    <footer>

      <slot name="footer"></slot>

    </footer>

</div>

②插槽内容

<base-layout>

    <h1 slot="header">标题内容</h1>

    <p>主要内容</p>

    <p slot="footer">底部内容</p>

<base-layout>

4.作用域插槽

应用场景:父组件对子组件的内容进行加工处理

①插槽定义

<ul>

    <li v-for="item in list" v-bind:key="item.id">

        <slot v-bind:item="item">

            {{item.name}}

        </slot>

    </li>

</ul>

②插槽内容

<fruit-list v-bind:list="list">

    <template slot-scope="slotProps">

        <strong v-if="slotProps.item.current">

            {{slotProps.item.text}}

        </strong>

      </template>

</fruit-list>

六、基于组件的案例

购物车

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