vue基礎知識總結

組件部分

Vue.js 組件主要分成三類:

1.由 vue-router 產生的每個頁面,它本質上也是一個組件(.vue),主要承載當前頁面的 HTML 結構,會包含數據獲取、數據整理、數據可視化等常規業務。整個文件相對較大,但一般不會有 props 選項和 自定義事件,因為它作為路由的渲染,不會被復用,因此也不會對外提供接口。
2.不包含業務,獨立、具體功能的基礎組件,比如日期選擇器、模態框等。這類組件作為項目的基礎控件,會被大量使用,因此組件的 API 進行過高強度的抽象,可以通過不同配置實現不同的功能。比如開源的 iView,就是包含了 50 多個這樣基礎組件的 UI 組件庫
3.業務組件。它不像第二類獨立組件只包含某個功能,而是在業務中被多個頁面復用的,它與獨立組件的區別是,業務組件只在當前項目中會用到,不具有通用性,而且會包含一些業務,比如數據請求;而獨立組件不含業務,在任何項目中都可以使用,功能單一,比如一個具有數據校驗功能的輸入框

Vue組件API:

props slot event(自定義事件)

Vue組件通訊:

一般來說,組件可以有以下幾種關系:



A 和 B、B 和 C、B 和 D 都是父子關系,C 和 D 是兄弟關系,A 和 C 是隔代關系(可能隔多代)。組件間經常會通信,Vue.js 內置的通信手段一般有兩種:

  • $ref:給元素或組件注冊引用信息。
  • $parent / $children:給元素或組件注冊引用信息。

這兩種都是直接得到組件實例,使用后可以直接調用組件的方法或訪問數據,比如下面的示例中,用 ref 來訪問組件(部分代碼省略):

// component-a
export default {
  data () {
    return {
      title: 'Vue.js'
    }
  },
  methods: {
    sayHello () {
      window.alert('Hello');
    }
  }
}
<template>
  <component-a ref="comA"></component-a>
</template>
<script>
  export default {
    mounted () {
      const comA = this.$refs.comA;
      console.log(comA.title);  // Vue.js
      comA.sayHello();  // 彈窗
    }
  }
</script>

$parent 和 $children 類似,也是基于當前上下文訪問父組件或全部子組件的。

這兩種方法的弊端是,無法在跨級或兄弟間通信,比如下面的結構:

// parent.vue
<component-a></component-a>
<component-b></component-b>
<component-b></component-b>

我們想在 component-a 中,訪問到引用它的頁面中(這里就是 parent.vue)的兩個 component-b 組件,那這種情況下,就得配置額外的插件或工具了,比如 Vuex 和 Bus 的解決方案。不過,它們都是依賴第三方插件的存在,這在開發獨立組件時是不可取的。后續陸續介紹一些黑科技,它們完全不依賴任何三方插件,就可以輕松得到任意的組件實例,或在任意組件間進行通信,且適用于任意場景。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。