国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

認(rèn)識Vue組件

xumenger / 3266人閱讀

摘要:認(rèn)識組件組件是強(qiáng)大的功能之一。注意,所有的組件同時(shí)也都是的實(shí)例,可接受相同的選項(xiàng)對象。組件全局注冊時(shí)通過方式注冊??紤]到會出現(xiàn)禁止使用的場景,需要禁止和啟用組件的功能,所以需要。同樣也是先在子組件的選項(xiàng)中定義好傳遞過來的數(shù)據(jù)。

前言

Vue.js是一套構(gòu)建用戶界面的漸進(jìn)式框架(官方說明)。通俗點(diǎn)來說,Vue.js是一個(gè)輕量級的,易上手易使用的,便捷,靈活性強(qiáng)的前端MVVM框架。簡潔的API,良好健全的中文文檔,使開發(fā)者能夠較容易的上手Vue框架。

本系列文章將結(jié)合個(gè)人在使用Vue中的一些經(jīng)(cai)驗(yàn)(keng)和一些案例,對Vue框架掌握的部分知識進(jìn)行輸出,同時(shí)也鞏固對Vue框架的理解。

認(rèn)識組件

組件是 Vue 強(qiáng)大的功能之一。Vue組件具有封裝可復(fù)用的特點(diǎn),能夠讓你在復(fù)雜的應(yīng)用中拆分成獨(dú)立模塊使用。注意,所有的 Vue 組件同時(shí)也都是 Vue 的實(shí)例,可接受相同的選項(xiàng)對象。

Vue組件的注冊

我們可以通過全局注冊和局部注冊的方式來注冊一個(gè) Vue 組件,兩種方式的區(qū)別在于,全局注冊的組件能夠在任何地方使用,其實(shí)就是所有的 Vue 實(shí)例化的時(shí)候都會去渲染這個(gè)全局組件;而局部組件只是注冊在某一個(gè) Vue 實(shí)例化對象上,只能在這個(gè) Vue 實(shí)例化的時(shí)候會渲染,其他地方使用會被當(dāng)成普通的Html標(biāo)簽渲染。我們就先來了解下全局組件的注冊。
Vue 組件全局注冊時(shí)通過 Vue.component(tagName, options) 方式注冊。 看一個(gè)簡單的示例。

Vue.component 方法中傳入兩個(gè)參數(shù),一個(gè)參數(shù)是組件的自定義標(biāo)簽名,另一個(gè)參數(shù)是一個(gè)對象,里面的template屬性的值就是組件的模板。

可能你會想,組件的內(nèi)容太簡單了吧,只有一個(gè)標(biāo)簽,要是內(nèi)容復(fù)雜點(diǎn)的組件,難道也要像以前一樣用字符串把內(nèi)容都拼接起來嗎?感覺太恐怖了,就算是使用了es6的字符串語法,寫下去也是一大推,很不優(yōu)雅感覺。嗯,是的,針對這個(gè)問題,在 Vue 中給出了良好的解決方案,可以使用

當(dāng)然,為了能夠讓代碼看起來更加清晰明了點(diǎn),你可以使用 template 標(biāo)簽來包裹組件模板,template 標(biāo)簽在瀏覽器渲染過程中不會被渲染出來。

好了,那么局部組件應(yīng)該怎么注冊呢?你可以通過在Vue實(shí)例選項(xiàng)components注冊僅在其作用域中可用的局部組件。

Vue實(shí)例選項(xiàng)components包含了一個(gè)屬性,鍵是組件的名稱,值是一個(gè)對象,包含了組件的模板等屬性。

使用 Prop 傳遞數(shù)據(jù)

每個(gè)Vue組件實(shí)例都有獨(dú)立范圍的作用域的,這意味著子組件的模板中無法獲取到父組件的數(shù)據(jù),那么Vue可以通過使用props參數(shù)來實(shí)現(xiàn)父組件向子組件傳遞數(shù)據(jù)。

可以看到,我們定義了一個(gè)props數(shù)組接收來自父組件傳遞的數(shù)據(jù),因?yàn)楦附M件傳遞的數(shù)據(jù)可能是多個(gè)。而事實(shí)上,props不一定是數(shù)組,也可以是對象,可以詳細(xì)的指定父組件傳遞的數(shù)據(jù)規(guī)則,包括默認(rèn)值,數(shù)據(jù)類型等。

props: {
    link: {
        type: String, //數(shù)據(jù)類型
        defalut: "https://www.baidu.com/" //默認(rèn)值
    }
}

那么父組件如何動態(tài)的傳遞數(shù)據(jù)給子組件呢?還記得v-bind指令的作用嗎,其作用是用于動態(tài)綁定html屬性或者是組件的props值,所以應(yīng)該使用v-bind指令來動態(tài)傳遞數(shù)據(jù)。



使用自定義事件實(shí)現(xiàn)子組件向父組件通信

我們知道,父組件使用 prop 傳遞數(shù)據(jù)給子組件。但子組件怎么跟父組件通信呢?這個(gè)時(shí)候 Vue 的自定義事件系統(tǒng)就派得上用場了。
假設(shè)我們在寫一個(gè)評論系統(tǒng),評論部分是Vue組件,評論提交之后我們要將評論的內(nèi)容展示出來。
先來寫出評論組件吧

評論組件模板包含了一個(gè)輸入框和一個(gè)提交評論的按鈕,就這么簡單,然后,就全局注冊這個(gè)組件

Vue.component("i-comment", {
    template: "#comment-component",
    data: function(){
        return {
            commentValue: ""
        }
    },
    methods: {
      handleSubmit: function(){
          if(this.commentValue.length < 1){
              alert("評論不能為空");
              return;
          }
          this.$emit("content", this.commentValue);
          this.commentValue = "";
      }
    }
})

可能你會發(fā)現(xiàn),組件里的data實(shí)例選項(xiàng)跟之前的寫法不一樣,是的,這個(gè)在寫組件的時(shí)候要注意的地方,Vue規(guī)定了組件中的data選項(xiàng)必須是函數(shù)。然后給提交按鈕綁定了一個(gè)點(diǎn)擊事件handleSubmit,當(dāng)你填寫了評論內(nèi)容,并點(diǎn)擊提交評論的時(shí)候,組件會通過 $emit(eventName) 觸發(fā)事件,并帶有一個(gè)參數(shù),就是把評論的內(nèi)容傳遞給父組件。

既然子組件是通過 $emit(eventName)來和父組件通信,那么父組件如何接收子組件傳遞過來的數(shù)據(jù)呢,答案是,使用 $on(eventName) 監(jiān)聽事件。

  • {{ item.time }} {{ item.content }}

在父組件中,監(jiān)聽子組件中定義的事件名,并調(diào)用一個(gè)方法 commentData。commentData方法用來獲取子組件傳遞給父組件的參數(shù),這樣就是一個(gè)子組件向父組件通信的過程。 可以查看完整的例子 。

實(shí)現(xiàn)一個(gè) Switch UI 組件

接下來,通過實(shí)際動手來實(shí)現(xiàn)一個(gè) Switch UI 組件。首先思考下Switch組件需要有哪些基本的API。

考慮到使用場景,需要制定不同尺寸的Switch組件,所以需要 size API。

考慮到會出現(xiàn)禁止使用的場景,需要禁止和啟用組件的功能,所以需要 disabled API。

考慮到需要自定義開啟和關(guān)閉時(shí)的背景顏色,所以需要 on-coloroff-color API來自定義背景色。

同理,可能需要自定義開啟和關(guān)閉時(shí)顯示的文字,所以需要 on-textoff-text API來自定義顯示的文字。

可能還會需要通過事件監(jiān)聽來獲取當(dāng)前的狀態(tài),并根據(jù)狀態(tài)做一些操作,所以需要一個(gè)事件來監(jiān)聽狀態(tài)的變化,所以需要 on-change API。

那么基本的API都列出來了,現(xiàn)在就可以開始一步步實(shí)現(xiàn)這些功能了。首先寫出組件模板的基本框架。


    
        
    

然后得注冊這個(gè)組件吧。

var prefixClass = "vut-switch";
Vue.component("vut-switch",{
    template: "#switch-component",
    props: {
        value: {
            type: Boolean,
            default: false
        }
    },
    data: function(){
        return {
            currentValue: this.value //當(dāng)前狀態(tài)
        }
    },
    computed: {
        wrapClass: function(){
            return prefixClass + "-wrap";
        },
        switchClass: function(){
            return [
                prefixClass,
                {
                    [prefixClass + "-checked"]: this.currentValue
                }
            ];
        }
    }
})

基本上架子就搭建好了。 然后就開始實(shí)現(xiàn)那些列出來的API。先來看如何實(shí)現(xiàn)size尺寸。

size尺寸的值肯定是通過父組件傳遞過來的,所以就先在子組件中的props選項(xiàng)中定義好size對象。

props: {
    value: {
        type: Boolean,
        default: false
    },
    size: String //尺寸
}

然后我們的思路是通過不同的樣式來控制渲染出來的Switch組件。我們根據(jù)傳入的不同尺寸的值來添加不同的Class值,制定不同的樣式,所以switchClass計(jì)算屬性中可這么寫:

switchClass: function(){
    return [
        prefixClass,
        {
            [prefixClass + "-checked"]: this.currentValue,
            [prefixClass +"-"+ this.size]: this.size
        }
    ];
}

然后就是添加對應(yīng)的樣式。

/*小尺寸*/
.vut-switch-small{
    width: 40px;
    height: 20px;
}
.vut-switch-small:after{
    width: 16px;
    height: 16px;
}
.vut-switch-small.vut-switch-checked:after{
    left: 22px;
}

/*大尺寸*/
.vut-switch-large{
    width: 60px;
}
.vut-switch-large.vut-switch-checked:after{
    left: 38px;
}

最后我們就在Vue實(shí)例初始化模板中使用Switch組件。


這樣我們就可以控制顯示Switch組件的尺寸了,效果如下:

然后來看看如何實(shí)現(xiàn)自定義背景色的。同樣也是先在子組件的props選項(xiàng)中定義好傳遞過來的數(shù)據(jù)。

props: {
    value: {
        type: Boolean,
        default: false
    },
    size: String, //尺寸
    onColor: String, //開啟時(shí)的自定義背景色
    ofColor: String //關(guān)閉時(shí)的自定義背景色
}

然后我們通過當(dāng)前的狀態(tài)來控制顯示不同的背景色,也就是要關(guān)注 currentValue 值。先來寫一個(gè)設(shè)置背景色的函數(shù),根據(jù)currentValue值的變化來設(shè)置背景色。

setBackgroundColor: function(){
    let customColor = this.currentValue ? this.onColor : this.offColor;
    this.$refs.switch.style.backgroundColor = customColor;
}

然后監(jiān)聽currentValue值的變化來調(diào)用這個(gè)函數(shù)。

watch: {
    currentValue: function(){
        this.setBackgroundColor();
    }
}

最后我們就在Vue實(shí)例初始化模板中使用Switch組件。

效果如下:

完整的例子請查看 switch組件 。

后記

本著學(xué)習(xí)和總結(jié)的態(tài)度寫的文章,文中有任何錯誤和問題,可以在github上指出 issues 。文中的案例都放置在github上,地址:https://github.com/webproblem/IntoVue。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/92164.html

相關(guān)文章

  • 重新認(rèn)識vue之 ref

    摘要:引用信息將會注冊在父組件的對象上。此時(shí)對的認(rèn)識在于,元素屬性寫了,則可以通過訪問到該元素。其實(shí)用在不同位置,訪問到的東西是不一樣的。也就是說如果用在子組件上,我們還可以通過調(diào)用子組件方法。比如前提是這個(gè)組件有這個(gè)方法。 ref ref 被用來給元素或子組件注冊引用信息。引用信息將會注冊在父組件的 $refs 對象上。此時(shí)對 ref 的認(rèn)識在于,元素屬性寫了 refs, 則可以通過 th...

    supernavy 評論0 收藏0
  • 002-讀書筆記-Vue官網(wǎng) 認(rèn)識數(shù)據(jù)與指令

    摘要:首先把改成的形式這是一段測試文字綁定最后的顯示效果如下,如果要看具體的形式,可以在谷歌人員開發(fā)工具中自行查看指令的組成部分經(jīng)過上面的介紹,應(yīng)該對指令有一個(gè)大概的認(rèn)識,下面就來對指令的每一項(xiàng)進(jìn)行說明。 這篇筆記主要用來說明 Vue 中數(shù)據(jù)的定義和指令的一些特性,后續(xù)會做更深入的說明。 1.Vue中的data函數(shù) 1-1 使用data函數(shù) 由于使用的是單文件組件,因此 Vue 組件中的數(shù)據(jù)...

    hqman 評論0 收藏0
  • 隨我來基于webpack構(gòu)建一個(gè)簡易的vue腳手架 (webpack系列二)

    摘要:構(gòu)建文件清理構(gòu)建目錄下的文件打包工具編譯文件模板函數(shù)編譯與配合使用入口處理項(xiàng)目中的不同類型的模塊。 前言 之前有寫了一篇webpack的文章(認(rèn)識篇) 猛戳,大家對于webpack基本概念(entry,output,loader,plugin,mode...)應(yīng)該是有了較模糊的認(rèn)識.今天希望在通過(對于vue-cli的效仿)搭建一個(gè)自己的腳手架的途中對于概念會有更深刻的認(rèn)識. 目錄 1...

    tomorrowwu 評論0 收藏0
  • Vue的生命周期

    摘要:和下面手動調(diào)用在控制臺中輸入在這個(gè)階段會銷毀實(shí)例,生命周期結(jié)束。外部實(shí)例中的函數(shù)顯示的效果參考鏈接組件的生命周期詳解生命周期 為什么要認(rèn)識Vue的生命周期 Vue的生命周期是一個(gè)非常重要的點(diǎn),如果不懂Vue的生命周期,那么很多時(shí)候,就不知道Vue的實(shí)際渲染時(shí)機(jī),程序中會出現(xiàn)各種bug。 因此,學(xué)習(xí)Vue的生命周期是非常用必要的。 showImg(https://segmentfault...

    y1chuan 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<