成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

認(rèn)識Vue組件

xumenger / 3283人閱讀

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

前言

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

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

認(rèn)識組件

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

Vue組件的注冊

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

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

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

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

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

Vue實例選項components包含了一個屬性,鍵是組件的名稱,值是一個對象,包含了組件的模板等屬性。

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

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

可以看到,我們定義了一個props數(shù)組接收來自父組件傳遞的數(shù)據(jù),因為父組件傳遞的數(shù)據(jù)可能是多個。而事實上,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ù)。



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

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

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

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

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

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

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

實現(xiàn)一個 Switch UI 組件

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

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

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

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

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

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

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


    
        
    

然后得注冊這個組件吧。

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
                }
            ];
        }
    }
})

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

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

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

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

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實例初始化模板中使用Switch組件。


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

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

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

然后我們通過當(dāng)前的狀態(tài)來控制顯示不同的背景色,也就是要關(guān)注 currentValue 值。先來寫一個設(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)用這個函數(shù)。

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

最后我們就在Vue實例初始化模板中使用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://systransis.cn/yun/92164.html

相關(guān)文章

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

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

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

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

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

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

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

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

    y1chuan 評論0 收藏0

發(fā)表評論

0條評論

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