Vue3 的 7 種和 Vue2 的 12 種組件通信,值得收藏

2021-12-09 程式設計師的那些事

Vue2.x組件通信12種方式寫在後面了,先來 Vue3 的

奧力給!

Vue3 組件通信方式Vue3 通信使用寫法1. props

用 props 傳數據給子組件有兩種方法,如下

方法一,混合寫法

// Parent.vue 傳送
<child :msg1="msg1" :msg2="msg2"></child>
<script>
import child from "./child.vue"
import { ref, reactive } from "vue"
export default {
    data(){
        return {
            msg1:"這是傳級子組件的信息1"
        }
    },
    setup(){
        // 創建一個響應式數據
        
        // 寫法一 適用於基礎類型  ref 還有其他用處,下面章節有介紹
        const msg2 = ref("這是傳級子組件的信息2")
        
        // 寫法二 適用於複雜類型,如數組、對象
        const msg2 = reactive(["這是傳級子組件的信息2"])
        
        return {
            msg2
        }
    }
}
</script>

// Child.vue 接收
<script>
export default {
  props: ["msg1", "msg2"],// 如果這行不寫,下面就接收不到
  setup(props) {
    console.log(props) // { msg1:"這是傳給子組件的信息1", msg2:"這是傳給子組件的信息2" }
  },
}
</script>

方法二,純 Vue3 寫法

// Parent.vue 傳送
<child :msg2="msg2"></child>
<script setup>
    import child from "./child.vue"
    import { ref, reactive } from "vue"
    const msg2 = ref("這是傳給子組件的信息2")
    // 或者複雜類型
    const msg2 = reactive(["這是傳級子組件的信息2"])
</script>

// Child.vue 接收
<script setup>
    // 不需要引入 直接使用
    // import { defineProps } from "vue"
    const props = defineProps({
        // 寫法一
        msg2: String
        // 寫法二
        msg2:{
            type:String,
            default:""
        }
    })
    console.log(props) // { msg2:"這是傳級子組件的信息2" }
</script>

注意:

如果父組件是混合寫法,子組件純 Vue3 寫法的話,是接收不到父組件裡 data 的屬性,只能接收到父組件裡 setup 函數裡傳的屬性

如果父組件是純 Vue3 寫法,子組件混合寫法,可以通過 props 接收到 data 和 setup 函數裡的屬性,但是子組件要是在 setup 裡接收,同樣只能接收到父組件中 setup 函數裡的屬性,接收不到 data 裡的屬性

官方也說了,既然用了 3,就不要寫 2 了,所以不推薦混合寫法。下面的例子,一律只用純 Vue3 的寫法,就不寫混合寫法了

2. $emit
// Child.vue 派發
<template>
    // 寫法一
    <button @click="emit('myClick')">按鈕</buttom>
    // 寫法二
    <button @click="handleClick">按鈕</buttom>
</template>
<script setup>
    
    // 方法一 適用於Vue3.2版本 不需要引入
    // import { defineEmits } from "vue"
    // 對應寫法一
    const emit = defineEmits(["myClick","myClick2"])
    // 對應寫法二
    const handleClick = ()=>{
        emit("myClick", "這是發送給父組件的信息")
    }
    
    // 方法二 不適用於 Vue3.2版本,該版本 useContext()已廢棄
    import { useContext } from "vue"
    const { emit } = useContext()
    const handleClick = ()=>{
        emit("myClick", "這是發送給父組件的信息")
    }
</script>

// Parent.vue 響應
<template>
    <child @myClick="onMyClick"></child>
</template>
<script setup>
    import child from "./child.vue"
    const onMyClick = (msg) => {
        console.log(msg) // 這是父組件收到的信息
    }
</script>

3. expose / ref

父組件獲取子組件的屬性或者調用子組件方法

// Child.vue
<script setup>
    // 方法一 不適用於Vue3.2版本,該版本 useContext()已廢棄
    import { useContext } from "vue"
    const ctx = useContext()
    // 對外暴露屬性方法等都可以
    ctx.expose({
        childName: "這是子組件的屬性",
        someMethod(){
            console.log("這是子組件的方法")
        }
    })
    
    // 方法二 適用於Vue3.2版本, 不需要引入
    // import { defineExpose } from "vue"
    defineExpose({
        childName: "這是子組件的屬性",
        someMethod(){
            console.log("這是子組件的方法")
        }
    })
</script>

// Parent.vue  注意 ref="comp"
<template>
    <child ref="comp"></child>
    <button @click="handlerClick">按鈕</button>
</template>
<script setup>
    import child from "./child.vue"
    import { ref } from "vue"
    const comp = ref(null)
    const handlerClick = () => {
        console.log(comp.value.childName) // 獲取子組件對外暴露的屬性
        comp.value.someMethod() // 調用子組件對外暴露的方法
    }
</script>

4. attrs

attrs:包含父作用域裡除 class 和 style 除外的非 props 屬性集合

// Parent.vue 傳送
<child :msg1="msg1" :msg2="msg2" title="3333"></child>
<script setup>
    import child from "./child.vue"
    import { ref, reactive } from "vue"
    const msg1 = ref("1111")
    const msg2 = ref("2222")
</script>

// Child.vue 接收
<script setup>
    import { defineProps, useContext, useAttrs } from "vue"
    // 3.2版本不需要引入 defineProps,直接用
    const props = defineProps({
        msg1: String
    })
    // 方法一 不適用於 Vue3.2版本,該版本 useContext()已廢棄
    const ctx = useContext()
    // 如果沒有用 props 接收 msg1 的話就是 { msg1: "1111", msg2:"2222", title: "3333" }
    console.log(ctx.attrs) // { msg2:"2222", title: "3333" }
    
    // 方法二 適用於 Vue3.2版本
    const attrs = useAttrs()
    console.log(attrs) // { msg2:"2222", title: "3333" }
</script>

5. v-model

可以支持多個數據雙向綁定

// Parent.vue
<child v-model:key="key" v-model:value="value"></child>
<script setup>
    import child from "./child.vue"
    import { ref, reactive } from "vue"
    const key = ref("1111")
    const value = ref("2222")
</script>

// Child.vue
<template>
    <button @click="handlerClick">按鈕</button>
</template>
<script setup>
    
    // 方法一  不適用於 Vue3.2版本,該版本 useContext()已廢棄
    import { useContext } from "vue"
    const { emit } = useContext()
    
    // 方法二 適用於 Vue3.2版本,不需要引入
    // import { defineEmits } from "vue"
    const emit = defineEmits(["key","value"])
    
    // 用法
    const handlerClick = () => {
        emit("update:key", "新的key")
        emit("update:value", "新的value")
    }
</script>

6. provide / inject

provide / inject 為依賴注入

provide:可以讓我們指定想要提供給後代組件的數據或

inject:在任何後代組件中接收想要添加在這個組件上的數據,不管組件嵌套多深都可以直接拿來用

// Parent.vue
<script setup>
    import { provide } from "vue"
    provide("name", "沐華")
</script>

// Child.vue
<script setup>
    import { inject } from "vue"
    const name = inject("name")
    console.log(name) // 沐華
</script>

7. Vuex
// store/index.js
import { createStore } from "vuex"
export default createStore({
    state:{ count: 1 },
    getters:{
        getCount: state => state.count
    },
    mutations:{
        add(state){
            state.count++
        }
    }
})

// main.js
import { createApp } from "vue"
import App from "./App.vue"
import store from "./store"
createApp(App).use(store).mount("#app")

// Page.vue
// 方法一 直接使用
<template>
    <div>{{ $store.state.count }}</div>
    <button @click="$store.commit('add')">按鈕</button>
</template>

// 方法二 獲取
<script setup>
    import { useStore, computed } from "vuex"
    const store = useStore()
    console.log(store.state.count) // 1

    const count = computed(()=>store.state.count) // 響應式,會隨著vuex數據改變而改變
    console.log(count) // 1 
</script>

8. mitt

Vue3 中沒有了 EventBus 跨組件通信,但是現在有了一個替代的方案 mitt.js,原理還是 EventBus

先安裝 npm i mitt -S

然後像以前封裝 bus 一樣,封裝一下

mitt.js
import mitt from 'mitt'
const mitt = mitt()
export default mitt

然後兩個組件之間通信的使用

// 組件 A
<script setup>
import mitt from './mitt'
const handleClick = () => {
    mitt.emit('handleChange')
}
</script>

// 組件 B 
<script setup>
import mitt from './mitt'
import { onUnmounted } from 'vue'
const someMethed = () => { ... }
mitt.on('handleChange',someMethed)
onUnmounted(()=>{
    mitt.off('handleChange',someMethed)
})
</script>

Vue2.x 組件通信方式

Vue2.x 組件通信共有12種

父子組件通信可以用:

兄弟組件通信可以用:

跨層級組件通信可以用:

Vue2.x 通信使用寫法

下面把每一種組件通信方式的寫法一一列出

1. props

父組件向子組件傳送數據,這應該是最常用的方式了

子組件接收到數據之後,不能直接修改父組件的數據。會報錯,所以當父組件重新渲染時,數據會被覆蓋。如果子組件內要修改的話推薦使用 computed

// Parent.vue 傳送
<template>
    <child :msg="msg"></child>
</template>

// Child.vue 接收
export default {
  // 寫法一 用數組接收
  props:['msg'],
  // 寫法二 用對象接收,可以限定接收的數據類型、設置默認值、驗證等
  props:{
      msg:{
          type:String,
          default:'這是默認數據'
      }
  },
  mounted(){
      console.log(this.msg)
  },
}

2. .sync

可以幫我們實現父組件向子組件傳遞的數據 的雙向綁定,所以子組件接收到數據後可以直接修改,並且會同時修改父組件的數據

// Parent.vue
<template>
    <child :page.sync="page"></child>
</template>
<script>
export default {
    data(){
        return {
            page:1
        }
    }
}

// Child.vue
export default {
    props:["page"],
    computed(){
        // 當我們在子組件裡修改 currentPage 時,父組件的 page 也會隨之改變
        currentPage {
            get(){
                return this.page
            },
            set(newVal){
                this.$emit("update:page", newVal)
            }
        }
    }
}
</script>

3. v-model

和 .sync 類似,可以實現將父組件傳給子組件的數據為雙向綁定,子組件通過 $emit 修改父組件的數據

// Parent.vue
<template>
    <child v-model="value"></child>
</template>
<script>
export default {
    data(){
        return {
            value:1
        }
    }
}

// Child.vue
<template>
    <input :value="value" @input="handlerChange">
</template>
export default {
    props:["value"],
    // 可以修改事件名,默認為 input
    model:{
        event:"updateValue"
    },
    methods:{
        handlerChange(e){
            this.$emit("input", e.target.value)
            // 如果有上面的重命名就是這樣
            this.$emit("updateValue", e.target.value)
        }
    }
}
</script>

4. ref

ref 如果在普通的DOM元素上,引用指向的就是該DOM元素;

如果在子組件上,引用的指向就是子組件實例,然後父組件就可以通過 ref 主動獲取子組件的屬性或者調用子組件的方法

// Child.vue
export default {
    data(){
        return {
            name:"沐華"
        }
    },
    methods:{
        someMethod(msg){
            console.log(msg)
        }
    }
}

// Parent.vue
<template>
    <child ref="child"></child>
</template>
<script>
export default {
    mounted(){
        const child = this.$refs.child
        console.log(child.name) // 沐華
        child.someMethod("調用了子組件的方法")
    }
}
</script>

5. $emit / v-on

子組件通過派發事件的方式給父組件數據,或者觸發父組件更新等操作

// Child.vue 派發
export default {
  data(){
      return { msg: "這是發給父組件的信息" }
  },
  methods: {
      handleClick(){
          this.$emit("sendMsg",this.msg)
      }
  },
}
// Parent.vue 響應
<template>
    <child v-on:sendMsg="getChildMsg"></child>
    // 或 簡寫
    <child @sendMsg="getChildMsg"></child>
</template>

export default {
    methods:{
        getChildMsg(msg){
            console.log(msg) // 這是父組件接收到的消息
        }
    }
}

6.

多層嵌套組件傳遞數據時,如果只是傳遞數據,而不做中間處理的話就可以用這個,比如父組件向孫子組件傳遞數據時

$attrs:包含父作用域裡除 class 和 style 除外的非 props 屬性集合。通過 this.attrs"

$listeners:包含父作用域裡 .native 除外的監聽事件集合。如果還要繼續傳給子組件內部的其他組件,就可以通過 v-on="$linteners"

使用方式是相同的

// Parent.vue
<template>
    <child :name="name" title="1111" ></child>
</template
export default{
    data(){
        return {
            name:"沐華"
        }
    }
}

// Child.vue
<template>
    // 繼續傳給孫子組件
    <sun-child v-bind="$attrs"></sun-child>
</template>
export default{
    props:["name"], // 這裡可以接收,也可以不接收
    mounted(){
        // 如果props接收了name 就是 { title:1111 },否則就是{ name:"沐華", title:1111 }
        console.log(this.$attrs)
    }
}

7.

$children:獲取到一個包含所有子組件(不包含孫子組件)的 VueComponent 對象數組,可以直接拿到子組件中所有數據和方法等

$parent:獲取到一個父節點的 VueComponent 對象,同樣包含父節點中所有數據和方法等

// Parent.vue
export default{
    mounted(){
        this.$children[0].someMethod() // 調用第一個子組件的方法
        this.$children[0].name // 獲取第一個子組件中的屬性
    }
}

// Child.vue
export default{
    mounted(){
        this.$parent.someMethod() // 調用父組件的方法
        this.$parent.name // 獲取父組件中的屬性
    }
}

8. provide / inject

provide / inject 為依賴注入,說是不推薦直接用於應用程式代碼中,但是在一些插件或組件庫裡卻是被常用,所以我覺得用也沒啥,還挺好用的

provide:可以讓我們指定想要提供給後代組件的數據或方法

inject:在任何後代組件中接收想要添加在這個組件上的數據或方法,不管組件嵌套多深都可以直接拿來用

要注意的是 provide 和 inject 傳遞的數據不是響應式的,也就是說用 inject 接收來數據後,provide 裡的數據改變了,後代組件中的數據不會改變,除非傳入的就是一個可監聽的對象

所以建議還是傳遞一些常量或者方法

// 父組件
export default{
    // 方法一 不能獲取 methods 中的方法
    provide:{
        name:"沐華",
        age: this.data中的屬性
    },
    // 方法二 不能獲取 data 中的屬性
    provide(){
        return {
            name:"沐華",
            someMethod:this.someMethod // methods 中的方法
        }
    },
    methods:{
        someMethod(){
            console.log("這是注入的方法")
        }
    }
}

// 後代組件
export default{
    inject:["name","someMethod"],
    mounted(){
        console.log(this.name)
        this.someMethod()
    }
}

9. EventBus

EventBus 是中央事件總線,不管是父子組件,兄弟組件,跨層級組件等都可以使用它完成通信操作

定義方式有三種

// 方法一
// 抽離成一個單獨的 js 文件 Bus.js ,然後在需要的地方引入
// Bus.js
import Vue from "vue"
export default new Vue()

// 方法二 直接掛載到全局
// main.js
import Vue from "vue"
Vue.prototype.$bus = new Vue()

// 方法三 注入到 Vue 根對象上
// main.js
import Vue from "vue"
new Vue({
    el:"#app",
    data:{
        Bus: new Vue()
    }
})

使用如下,以方法一按需引入為例

// 在需要向外部發送自定義事件的組件內
<template>
    <button @click="handlerClick">按鈕</button>
</template>
import Bus from "./Bus.js"
export default{
    methods:{
        handlerClick(){
            // 自定義事件名 sendMsg
            Bus.$emit("sendMsg", "這是要向外部發送的數據")
        }
    }
}

// 在需要接收外部事件的組件內
import Bus from "./Bus.js"
export default{
    mounted(){
        // 監聽事件的觸發
        Bus.$on("sendMsg", data => {
            console.log("這是接收到的數據:", data)
        })
    },
    beforeDestroy(){
        // 取消監聽
        Bus.$off("sendMsg")
    }
}

10. Vuex

Vuex 是狀態管理器,集中式存儲管理所有組件的狀態。這一塊內容過長,如果基礎不熟的話可以看這個Vuex,然後大致用法如下

比如創建這樣的文件結構

微信圖片_20210824003500.jpg

index.js 裡內容如下

import Vue from 'vue'
import Vuex from 'vuex'
import getters from './getters'
import actions from './actions'
import mutations from './mutations'
import state from './state'
import user from './modules/user'

Vue.use(Vuex)

const store = new Vuex.Store({
  modules: {
    user
  },
  getters,
  actions,
  mutations,
  state
})
export default store

然後在 main.js 引入

import Vue from "vue"
import store from "./store"
new Vue({
    el:"#app",
    store,
    render: h => h(App)
})

然後在需要的使用組件裡

import { mapGetters, mapMutations } from "vuex"
export default{
    computed:{
        // 方式一 然後通過 this.屬性名就可以用了
        ...mapGetters(["引入getters.js裡屬性1","屬性2"])
        // 方式二
        ...mapGetters("user", ["user模塊裡的屬性1","屬性2"])
    },
    methods:{
        // 方式一 然後通過 this.屬性名就可以用了
        ...mapMutations(["引入mutations.js裡的方法1","方法2"])
        // 方式二
        ...mapMutations("user",["引入user模塊裡的方法1","方法2"])
    }
}

// 或者也可以這樣獲取
this.$store.state.xxx
this.$store.state.user.xxx

11. $root

$root 可以拿到 App.vue 裡的數據和方法

12. slot

就是把子組件的數據通過插槽的方式傳給父組件使用,然後再插回來

// Child.vue
<template>
    <div>
        <slot :user="user"></slot>
    </div>
</template>
export default{
    data(){
        return {
            user:{ name:"沐華" }
        }
    }
}

// Parent.vue
<template>
    <div>
        <child v-slot="slotProps">
            {{ slotProps.user.name }}
        </child>
    </div>
</template>

結語

寫作不易,你的一贊一評,就是我前行的最大動力。

相關焦點

  • Vue3的7種和Vue2的12種組件通信,值得收藏
    x組件通信12種方式寫在後面了,先來 Vue3 的奧力給!如果父組件是混合寫法,子組件純 Vue3 寫法的話,是接收不到父組件裡 data 的屬性,只能接收到父組件裡 setup 函數裡傳的屬性如果父組件是純 Vue3 寫法,子組件混合寫法,可以通過 props 接收到 data 和 setup 函數裡的屬性,但是子組件要是在 setup 裡接收
  • Vue2.0父子組件間通信
    vue2.0Vue.js是一套構建用戶界面的漸進式框架。與其他重量級框架不同的是,Vue 從根本上採用最小成本、漸進增量的設計。Vue 的核心庫只專注於視圖層,並且很容易與其他第三方庫或現有項目集成。另一方面,當與單文件組件和 Vue 生態系統支持的庫結合使用時,Vue 也完全能夠為複雜的單頁應用程式提供有力驅動。
  • 面試官:Vue組件間通信方式都有哪些?
    一、組件間通信的概念開始之前,我們把組件間通信這個詞進行拆分都知道組件是vue最強大的功能之一,vue中每一個.vue我們都可以視之為一個組件通信指的是發送者通過某種媒體以某種格式來傳遞信息到收信者以達到某個目的
  • Vue組件通信的葵花寶典
    今天我們聊一聊,面試中經常會被問及的問題,vue組件如何通信:props——常用於父子組件$emit——子組件觸發父組件事件.sync——雙向綁定語法糖(較少使用)$attrs和$listeners ——組件封裝provide和inject ——多層組件封裝$parent和$children——父子組件直接調用boradcast和dispatch ——vue2.0刪掉了EventBus
  • Vue.js 父子組件通信的十種方式
    概述幾種通信方式無外乎以下幾種:詳述下面逐個介紹,大神請繞行。1. Prop英式發音:[prɒp]。這個在我們日常開發當中用到的非常多。簡單來說,我們可以通過 Prop 向子組件傳遞數據。用一個形象的比喻來說,父子組件之間的數據傳遞相當於自上而下的下水管子,只能從上往下流,不能逆流。
  • Vue組件的通信--eventBus
    但是對於具有簡單體系結構的應用程式來說,使用事件在組件之間進行通信就足夠了。為此,我們可以創建一個快速的解決方案並實現EventBus,也稱作vue的中央事件總線,適用於跨級或兄弟組件。EventBus允許我們在一個組件中發出一個事件,而在另一個組件中偵聽該事件。本示例將說明如何在Vue.js應用程式中執行此操作。
  • vue2.0 子組件和父組件之間的傳值
    >剛剛我們創建的是vue基於webpack工具的一個模板項目,對於webpack和熱加載這些不熟悉的同學不必在意,我們現在不會過多關注webpack的,不過建議對vue有興趣的同學還是去了解一下webpack,它也算是vue開發中的一個必備工具接著我們進入Demo,首先我們可以刪除掉模板項目中src/components/
  • vue常用框架和組件代碼,抓緊收藏轉發吧
    . element-ui  餓了麼出品的基於Vue2.0的ui框架http://element-cn.eleme.io/#/zh-CN     2. iview  和element-ui差不多的組件庫https://iviewui.com/3. mint-ui 移動端ui組件庫http://mint-ui.github.io/#!
  • 12 種使用 Vue 的優秀做法
    隨著 VueJS 的使用越來越廣泛,出現了幾種優秀實踐並逐漸成為標準。在本文中,主要分享在平時開發中一些有用資源和技巧,廢話少說,我們開始吧。2.在事件中使用短橫線命名在發出定製事件時,最好使用短橫線命名,這是因為在父組件中,我們使用相同的語法來偵聽該事件。
  • Vue面試題(3)Vue-Router和Vuex
    _committing = committing}3、為啥要有vuex,使用localStorage本地存儲不行麼?Vuex 是一個專為 Vue.js 應用程式開發的狀態管理模式,Vuex 的狀態存儲是響應式的。當 Vue 組件從 store 中讀取狀態的時候,若 store 中的狀態發生變化,那麼相應的組件也會相應地得到高效更新。
  • Vue-使用vue-video-player組件
    在實際開發過程中會有添加視頻的需求在vue項目中添加視頻可以使用vue-video-player組件來實現實現步驟:1.安裝在控制臺輸入: npm install vue-video-player –s
  • 【組件庫從0到1】Vite + Vue3 + TSX開發指南
    不少前端小夥伴問過我,說業務代碼寫了2、3年了,應該如何再進一步?村長的回答中大多數會提到兩個關鍵點:加強工程化實踐能力和底層原理源碼知識。工程化能力對於小夥伴們在工作中解決問題有直接影響,如果你想成為小組內的核心程式設計師,拿更高的職位和薪資,能夠給大家搭架子,解決問題,重難點突破是非常關鍵的幾個考察點。
  • 推薦8 個漂亮實用的 vue.js 進度條組件
    為大家精心挑選了 8 個漂亮的 Progress Bars 組件,並附上 GitHub 連結和 vue.js 代碼示例,以及Vue3 快速深入全攻略。1.easy-circular-progress一個簡單的循環進度組件,帶有計數效果。
  • Vue隱藏技能:運行時渲染用戶寫入的組件代碼!
    頁面由組件構成,頁面本身其實也是組件,只是在部分參數和掛載方式上有些區別而已。動態實例方案與動態組件方案大致相同,都要通過 computed 屬性,生成component對象和scopedStyle對象進行渲染,但也有些許的區別,動態實例比動態組件需要多考慮以下幾點:需要一個穩定的掛載點從 vue2.0 開始,vue 實例的掛載策略變更為,所有的掛載元素會被 Vue 生成的 DOM 替換[10
  • 【Vue.js入門到實戰教程】11-Vue Loader(下)| 編寫一個單文件 Vue 組件
    編寫 ModalExample 組件我們將 vue_learning/component/slot.html 中的 modal-example 組件拆分出來,在 vue_learning/demo-project/src/components 目錄下新建一個單文件組件 ModalExample.vue,將 modal-example 組件代碼按照 Vue Loader 指定的格式填充到對應位置
  • vue題
    vue的數據雙向綁定 將MVVM作為數據綁定的入口,整合Observer,Compile和Watcher三者,通過Observer來監聽自己的model的數據變化,通過Compile來解析編譯模板指令(vue中是用來解析 {{}}),最終利用watcher搭起observer和Compile之間的通信橋梁,達到數據變化 —>視圖更新;視圖交互變化(input)—>數據model
  • Vue 組件通信方式居然有這麼多?你了解幾種
    vue組件通信的方式,這是在面試中一個非常高頻的問題,我剛開始找實習便經常遇到這個問題,當時只知道回到props和 $emit,後來隨著學習的深入,才發現vue組件的通信方式竟然有這麼多!今天對vue組件通信方式進行一下總結,如寫的有疏漏之處還請大家留言。
  • vue-cli3.x的構建第三方庫按需引用,自定義組件的探索
    的組件庫,並分開暴露給外部引用vue-cli3.x探索3.x中babel配置項全升級新的@babel7.x由原來的babel-全變遷為@babelvue.config.js即為所有配置區別於wepack的配置項,此配置項為對webpack的二次封裝內部cli自動協調Dart-sass,不用再處理sass-loader問題從2.x-3.x的遷徙,
  • Vue.js說說組件
    下面來看看一個完整的組件註冊和使用例子。下面的列子在同一個vue實例下掛了home、posts、archive三個組件,通過特性currentView動態切換組件顯示。例如:var data = { a: 1 };var vm = new Vue({data: data});// `vm.a` 和 `data.a` 現在是響應的vm.b = 2// `vm.b` 不是響應的data.b = 2// `data.b` 不是響應的    不過,也有辦法在實例創建後添加屬性並且讓它是相應的。
  • Vue最重要的知識點:組件化開發
    學習計劃安排如下:首先補充兩個知識點:計算屬性和監控。再學一下vue中的組件化開發,包括全局、局部組件以及父子組件之間的通信。最後關於組件框架,後續在項目中遇到具體的需求再做說明。因為組件不會與頁面的元素綁定,否則就無法復用了,因此沒有el屬性。template:其和el屬性的作用是類似的,對應視圖模板。data():定義方式比較特殊,必須是一個函數,作用就對應vue實例中的data屬性。