Vue——組件(2)

好看的網(wǎng)頁千篇一律,有趣的代碼萬里挑一。

編輯代碼就像創(chuàng)作藝術(shù),享受個(gè)過程,最后得到心滿意足的結(jié)果。

今天繼續(xù)一起學(xué)習(xí)Vue組件——父子組件、第三方組件。




父子組件

? ? <div id="app">

? ? ? ? <h4>app</h4>

? ? ? ? <h4>姓名:{{name}},年齡:{{age}}</h4>

? ? ? ? <button @click="updateCar">修改b-one的汽車</button>

? ? ? ? <button @click="updatePlane">修改b-two的飛機(jī)</button>

? ? ? ? <!-- 給組件標(biāo)簽添加一個(gè)ref屬性,然后就可以通過$refs返回?fù)碛衦ef屬性的組件 -->

? ? ? ? <b-one ref="one">

? ? ? ? ? ? <b-three></b-three>

? ? ? ? </b-one>

? ? ? ? <b-two ref="two"></b-two>

? ? </div>

? ? // 定義b-one組件

? ? Vue.component('b-one', {

? ? // 組件的模板中,只有包含一個(gè)根標(biāo)簽,

? ? // 注意:定義插槽后才能嵌套子組件

? ? template:`

? ? <div class="one">

? ? ? ? <h4>b-one</h4>

? ? ? ? <h4>{{car}}</h4>

? ? ? ? <h4>App----姓名:{{myname}},年齡:{{myage}}</h4>

? ? ? ? <slot></slot>

? ? </div>

? ? `,

? ? data() {

? ? return {

? ? car:{

? ? name:'奔馳',

? ? price:'50W'

? ? }

? ? }

? ? },

? ? computed:{

? ? myname(){

? ? // $parent獲取父組件的實(shí)例

? ? return this.$parent.name

? ? },

? ? myage(){

? ? return this.$parent.age

? ? }

? ? },

? ? created() {

? ? console.log('b-one----created');

? ? },

? ? mounted() {

? ? console.log('b-one----mounted');

? ? },

? ? })

? ? // 定義b-two組件

? ? Vue.component('b-two', {

? ? template:`

? ? <div class="two">

? ? ? ? <h4>b-two</h4>

? ? ? ? <h4>{{plane}}</h4>

? ? </div>

? ? `,

? ? data() {

? ? return {

? ? plane:{

? ? name:'波音747',

? ? price:'20億'

? ? }

? ? }

? ? },

? ? })

? ? // 定義b-three組件

? ? Vue.component('b-three', {

? ? template:`

? ? <div class="three">

? ? ? ? <h4>b-three</h4>

? ? ? ? <h4>App----姓名:{{name}},年齡:{{age}}</h4>

? ? </div>

? ? `,

? ? computed:{

? ? name(){

? ? // 通過$parent還可以繼續(xù)獲取它的父級(jí)組件

? ? return this.$parent.$parent.name

? ? },

? ? age(){

? ? // $root獲取根組件

? ? return this.$root.age

? ? }

? ? },

? ? created() {

? ? console.log('b-three----created');

? ? },

? ? mounted() {

? ? console.log('b-three----mounted');

? ? },

? ? })

? ? // 創(chuàng)建vue實(shí)例

? ? new Vue({

? ? el:'#app',

? ? // 注意觀察:在父組件創(chuàng)建完成到掛載完成之間,包含完整的子組件的生命周期

? ? created() {

? ? console.log('app----created');

? ? },

? ? mounted() {

? ? console.log('app----mounted');

? ? // 根據(jù)組件在頁面中的順序返回所有的組件

? ? console.log(this.$children);

? ? // 返回所有帶有ref屬性的組件

? ? console.log(this.$refs);

? ? },

? ? data() {

? ? return {

? ? name:'張三',

? ? age:20

? ? }

? ? },

? ? methods: {

? ? //修改汽車的方法

? ? updateCar(){

? ? // $children獲取的是所有子組件的實(shí)例,返回的是數(shù)組類型,再通過下標(biāo)獲取指定的子組件

? ? // 如果頁面的結(jié)構(gòu)出現(xiàn)了調(diào)整,這里獲取的具體的組件可以就對(duì)不上號(hào)了。

? ? /* this.$children[0].car = {

? ? name:'寶馬',

? ? price:'40W'

? ? } */

? ? // $refs對(duì)象中,保存著所有添加了ref屬性的組件實(shí)例

? ? this.$refs.one.car = {

? ? name:'寶馬',

? ? price:'40W'

? ? }

? ? },

? ? // 修改飛機(jī)的方法

? ? updatePlane(){

? ? /* this.$children[1].plane = {

? ? name:'長征2號(hào)',

? ? price:'30億'

? ? } */

? ? this.$refs.two.plane = {

? ? name:'長征2號(hào)',

? ? price:'30億'

? ? }

? ? }

? ? },

? ? })


第三方組件庫


1.?Element——網(wǎng)站快速成型工具


2.iview



3.Ant Design of Vue



4.移動(dòng)端的?Vant


自定義表格組件--仿iview

?<div id="app">

? ? ? ? <b-table :data="data1" :columns="columns1"></b-table>

? ? ? ? <hr>

? ? ? ? <b-table :data="data2" :columns="columns2"></b-table>

? ? </div>

? ? // 定義一個(gè)b-table組件

? ? Vue.component('b-table', {

? ? ? ? template:`

? ? ? ? <table>

? ? ? ? <tr>

? ? ? ? <th v-for="(item,index) in columns" :key="index">{{item.title}}</th>

? ? ? ? </tr>

? ? ? ? <tr v-for="(item,index) in data" :key="index">

? ? ? ? <td v-for="(item2,index2) in columns" :key="index2">{{item[item2.key]}}</td>

? ? ? ? </tr>

? ? ? ? </table>

? ? ? ? `,

? ? ? ? // 定義組件標(biāo)簽上的屬性,用于接收外部傳給組件的數(shù)據(jù)

? ? ? ? props:['data','columns'],

? ? })


? ? // 創(chuàng)建vue實(shí)例

? ? new Vue({

? ? ? ? el:'#app',

? ? ? ? data() {

? ? ? ? ? ? return {

? ? ? ? ? ? ? ? // 表格的列數(shù)據(jù)

? ? ? ? ? ? ? ? columns1:[

? ? ? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? ? title:'姓名',

? ? ? ? ? ? ? ? ? ? ? ? key:'name'

? ? ? ? ? ? ? ? ? ? },

? ? ? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? ? title:'年齡',

? ? ? ? ? ? ? ? ? ? ? ? key:'age'

? ? ? ? ? ? ? ? ? ? },

? ? ? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? ? title:'性別',

? ? ? ? ? ? ? ? ? ? ? ? key:'sex'

? ? ? ? ? ? ? ? ? ? },

? ? ? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? ? title:'工資',

? ? ? ? ? ? ? ? ? ? ? ? key:'money'

? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ],

? ? ? ? ? ? ? ? // 表格數(shù)據(jù)

? ? ? ? ? ? ? ? data1:[{

? ? ? ? ? ? ? ? ? ? name:'張三',

? ? ? ? ? ? ? ? ? ? age:20,

? ? ? ? ? ? ? ? ? ? sex:'男',

? ? ? ? ? ? ? ? ? ? money:10000

? ? ? ? ? ? ? ? },{

? ? ? ? ? ? ? ? ? ? name:'李四',

? ? ? ? ? ? ? ? ? ? age:22,

? ? ? ? ? ? ? ? ? ? sex:'女',

? ? ? ? ? ? ? ? ? ? money:20000

? ? ? ? ? ? ? ? },{

? ? ? ? ? ? ? ? ? ? name:'王五',

? ? ? ? ? ? ? ? ? ? age:24,

? ? ? ? ? ? ? ? ? ? sex:'女',

? ? ? ? ? ? ? ? ? ? money:30000

? ? ? ? ? ? ? ? }],

? ? ? ? ? ? ? ? columns2:[

? ? ? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? ? title:'編號(hào)',

? ? ? ? ? ? ? ? ? ? ? ? key:'id'

? ? ? ? ? ? ? ? ? ? },

? ? ? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? ? title:'車名',

? ? ? ? ? ? ? ? ? ? ? ? key:'name'

? ? ? ? ? ? ? ? ? ? },

? ? ? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? ? title:'產(chǎn)地',

? ? ? ? ? ? ? ? ? ? ? ? key:'address'

? ? ? ? ? ? ? ? ? ? },

? ? ? ? ? ? ? ? ],

? ? ? ? ? ? ? ? // 表格數(shù)據(jù)2

? ? ? ? ? ? ? ? data2:[{

? ? ? ? ? ? ? ? ? ? id:'1001',

? ? ? ? ? ? ? ? ? ? name:'奔馳',

? ? ? ? ? ? ? ? ? ? address:'德國'

? ? ? ? ? ? ? ? },{

? ? ? ? ? ? ? ? ? ? id:'1002',

? ? ? ? ? ? ? ? ? ? name:'紅旗',

? ? ? ? ? ? ? ? ? ? address:'中國'

? ? ? ? ? ? ? ? },{

? ? ? ? ? ? ? ? ? ? id:'1003',

? ? ? ? ? ? ? ? ? ? name:'捷豹',

? ? ? ? ? ? ? ? ? ? address:'英國'

? ? ? ? ? ? ? ? }]

? ? ? ? ? ? }

? ? ? ? },

? ? })


?自定義表格組件--仿element-ui

? <div id="app">

? ? ? ? <b-table :data="data1">

? ? ? ? ? ? <b-table-column prop="name" label="姓名"></b-table-column>

? ? ? ? ? ? <b-table-column prop="age" label="年齡"></b-table-column>

? ? ? ? ? ? <b-table-column prop="sex" label="性別"></b-table-column>

? ? ? ? ? ? <b-table-column prop="money" label="工資"></b-table-column>

? ? ? ? </b-table>

? ? ? ? <hr>

? ? ? ? <b-table :data="data2">

? ? ? ? ? ? <b-table-column prop="id" label="編號(hào)"></b-table-column>

? ? ? ? ? ? <b-table-column prop="name" label="車名"></b-table-column>

? ? ? ? ? ? <b-table-column prop="address" label="產(chǎn)地"></b-table-column>

? ? ? ? </b-table>

? ? </div>

? // 定義一個(gè)b-table-column組件

? ? Vue.component('b-table-column', {

? ? ? ? template:`

? ? ? ? <th>{{label}}</th>

? ? ? ? `,

? ? ? ? props:['prop','label'],

? ? ? ? mounted() {

? ? ? ? ? ? // 子組件掛載完成時(shí),將獲取到的屬性的名稱,添加到父組件的columns數(shù)組中。

? ? ? ? ? ? this.$parent.columns.push(this.prop)

? ? ? ? },

? ? })


? ? // 定義一個(gè)b-table組件

? ? Vue.component('b-table', {

? ? ? ? template:`

? ? ? ? <table>

? ? ? ? <tr>

? ? ? ? <slot></slot>

? ? ? ? </tr>

? ? ? ? <tr v-for="(item,index) in data" :key="index">

? ? ? ? <td v-for="(item2,index2) in columns" :key="index2">{{item[item2]}}</td>

? ? ? ? </tr>

? ? ? ? </table>

? ? ? ? `,

? ? ? ? // 定義組件標(biāo)簽上的屬性,用于接收外部傳給組件的數(shù)據(jù)

? ? ? ? props:['data'],

? ? ? ? data() {

? ? ? ? ? ? return {

? ? ? ? ? ? ? ? // 該數(shù)組存放屬性的名稱

? ? ? ? ? ? ? ? columns:[]

? ? ? ? ? ? }

? ? ? ? },

? ? })


? ? // 創(chuàng)建vue實(shí)例

? ? new Vue({

? ? ? ? el:'#app',

? ? ? ? data() {

? ? ? ? ? ? return {

? ? ? ? ? ? ? ? // 表格數(shù)據(jù)

? ? ? ? ? ? ? ? data1:[{

? ? ? ? ? ? ? ? ? ? name:'張三',

? ? ? ? ? ? ? ? ? ? age:20,

? ? ? ? ? ? ? ? ? ? sex:'男',

? ? ? ? ? ? ? ? ? ? money:10000

? ? ? ? ? ? ? ? },{

? ? ? ? ? ? ? ? ? ? name:'李四',

? ? ? ? ? ? ? ? ? ? age:22,

? ? ? ? ? ? ? ? ? ? sex:'女',

? ? ? ? ? ? ? ? ? ? money:20000

? ? ? ? ? ? ? ? },{

? ? ? ? ? ? ? ? ? ? name:'王五',

? ? ? ? ? ? ? ? ? ? age:24,

? ? ? ? ? ? ? ? ? ? sex:'女',

? ? ? ? ? ? ? ? ? ? money:30000

? ? ? ? ? ? ? ? }],

? ? ? ? ? ? ? ? // 表格數(shù)據(jù)2

? ? ? ? ? ? ? ? data2:[{

? ? ? ? ? ? ? ? ? ? id:'1001',

? ? ? ? ? ? ? ? ? ? name:'奔馳',

? ? ? ? ? ? ? ? ? ? address:'德國'

? ? ? ? ? ? ? ? },{

? ? ? ? ? ? ? ? ? ? id:'1002',

? ? ? ? ? ? ? ? ? ? name:'紅旗',

? ? ? ? ? ? ? ? ? ? address:'中國'

? ? ? ? ? ? ? ? },{

? ? ? ? ? ? ? ? ? ? id:'1003',

? ? ? ? ? ? ? ? ? ? name:'捷豹',

? ? ? ? ? ? ? ? ? ? address:'英國'

? ? ? ? ? ? ? ? }]

? ? ? ? ? ? }

? ? ? ? },

? ? })

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 組件 全局組件 <component-test></component-test> ...
    王蕾_fd49閱讀 338評(píng)論 0 1
  • 對(duì)于vue來說,組件之間的消息傳遞是非常重要的,下面是我對(duì)組件之間消息傳遞的各種方式的總結(jié),總共有8種方式。 1....
    edc余悸閱讀 427評(píng)論 0 3
  • 組件(Component)是Vue.js最核心的功能,也是整個(gè)架構(gòu)設(shè)計(jì)最精彩的地方,當(dāng)然也是最難掌握的。...
    六個(gè)周閱讀 5,775評(píng)論 0 32
  • Vue的組件化 經(jīng)過兩天的學(xué)習(xí),現(xiàn)在終于來到了組件化開發(fā)的環(huán)節(jié),Vue的組件化是很重要的一個(gè)點(diǎn),一定要認(rèn)真學(xué)習(xí)?。?..
    waigo閱讀 434評(píng)論 0 1
  • 一、簡介 1、 Vue.js 是什么 參考網(wǎng)址:https://cn.vuejs.org/v2/guide/ind...
    滿天繁星_28c5閱讀 566評(píng)論 0 1

友情鏈接更多精彩內(nèi)容