Vue入門系列(二)Vue實(shí)例和組件

Vue實(shí)例是Vue應(yīng)用的啟動(dòng)器,Vue組件是Vue實(shí)例的擴(kuò)展。

1. Vue實(shí)例

通過構(gòu)造函數(shù)可以創(chuàng)建一個(gè)Vue的根實(shí)例。

SPA應(yīng)用中,只會(huì)創(chuàng)建一個(gè)Vue根實(shí)例,應(yīng)用都是通過這個(gè)根實(shí)例啟動(dòng)的。

實(shí)例化 Vue 時(shí),需要傳入一個(gè)選項(xiàng)對象,它可以包含數(shù)據(jù)(data),模板(template),掛載元素(el),方法(methods)與生命周期鉤子函數(shù)(created,mounted...)等選項(xiàng)。下面是一個(gè)真實(shí)項(xiàng)目中定義的Vue實(shí)例:

import Vue from 'vue';
import App from './App.vue'
...
// 激活Vue調(diào)試工具vue-devtools
Vue.config.devtools = true;

new Vue({
    router, // react-router
    store,  // vuex
    el: '#app', // 需要渲染的DOM節(jié)點(diǎn)
    render: h => h(App) // //h是createElement 的別名,創(chuàng)建/加載組件
});

2. Vue組件

Vue組件是被擴(kuò)展的Vue實(shí)例,同Vue實(shí)例類似,它也需要傳入一個(gè)選項(xiàng)對象,包含數(shù)據(jù),模板,生命周期鉤子函數(shù)等等。

組件分為局部組件和全局組件。

(1)局部組件

局部組件只能在所定義的Vue實(shí)例中使用,格式如下:

//定義<my-component>組件
new Vue({
  // ...
  components: {
    // <my-component> 將只在父模板可用
    'my-component': {
      template: '<div>A custom component!</div>'
    }
  }
})
(2)全局組件
第一種方式:利用Vue提供的靜態(tài)函數(shù)component注冊:
Vue.component('my-component', {
  template: '<div>A custom component!</div>',
  //必須是用函數(shù)返回?cái)?shù)據(jù)模型,這樣才能讓多個(gè)組件實(shí)例擁有自己的數(shù)據(jù)模型
  data: function () {
    return data;
  }
})
第二種方式:單文件組件

定義一個(gè)后綴為.vue的文件,利用webpack編譯處理。

單文件組件的最大優(yōu)點(diǎn)是,可以將組件相關(guān)的HTML,CSS,JS都定義在.vue文件內(nèi),默認(rèn)支持CSS模塊化(樣式僅在該組件內(nèi)有效),JavaScript模塊化(CommonJs模塊)。

參考官網(wǎng)例子:

單文件組件模板.png

注意,<style>scope屬性后,能夠?qū)?biāo)簽內(nèi)部的CSS選擇器自動(dòng)加上后綴,使其僅應(yīng)用在此組件內(nèi)。下圖是編譯后的組件內(nèi)聯(lián)樣式:

css module.png

vue文件組件也支持CSS預(yù)處理語言,比如scss或者less。如需使用scss,定義lang屬性即可:

<style lang="scss" scoped>...</style>

webpack.config中需要加載vue-loader來解析.vue文件(下面配置支持在vue組件中使用scss語法)。

module: {
        rules: [
            {
                test: /\.vue$/,
                loader: 'vue-loader',
                options: {
                    loaders: {
                        // Since sass-loader (weirdly) has SCSS as its default parse mode, we map
                        // the "scss" and "sass" values for the lang attribute to the right configs here.
                        // other preprocessors should work out of the box, no loader config like this necessary.
                        'scss': 'vue-style-loader!css-loader!sass-loader',
                        'sass': 'vue-style-loader!css-loader!sass-loader?indentedSyntax'
                    }
                    // other vue-loader options go here
                }
            },
            ......
        ]
    },

小結(jié)

建議采用單文件組件方式創(chuàng)建Vue項(xiàng)目,這樣可以更好的和路由插件配合。
隨著項(xiàng)目不斷迭代,組件復(fù)雜度會(huì)隨之增加,單文件組件有著更好的可讀性和可擴(kuò)展性,非常適合大中型項(xiàng)目。

下一節(jié):Vue入門系列(三)Vue實(shí)例的生命周期

更多高階內(nèi)容,可移步《小專欄-娜姐聊前端》

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

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

  • 這篇筆記主要包含 Vue 2 不同于 Vue 1 或者特有的內(nèi)容,還有我對于 Vue 1.0 印象不深的內(nèi)容。關(guān)于...
    云之外閱讀 5,174評論 0 29
  • 此文基于官方文檔,里面部分例子有改動(dòng),加上了一些自己的理解 什么是組件? 組件(Component)是 Vue.j...
    陸志均閱讀 3,945評論 5 14
  • 1.安裝 可以簡單地在頁面引入Vue.js作為獨(dú)立版本,Vue即被注冊為全局變量,可以在頁面使用了。 如果希望搭建...
    Awey閱讀 11,295評論 4 129
  • Vue 實(shí)例 屬性和方法 每個(gè) Vue 實(shí)例都會(huì)代理其 data 對象里所有的屬性:var data = { a:...
    云之外閱讀 2,369評論 0 6
  • 此生是我負(fù)你, 若有來世, 你不嫌棄, 我必以生死許! 情若此, 最無奈是別離, 滿腹衷腸難訴。 傷心處, 竟是無...
    花少顏閱讀 341評論 0 0

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