有兩個類似的組件, 他們基本功能是同樣的, 可是他們以前又存在差別,正常思惟是: 是把它拆成兩個不一樣的組件呢, 仍是保留爲一個組件,使用props傳值來創造差別從而進行區分
兩個方案都不完美: 若是拆分紅兩個組件, 你就不得不冒着一旦功能變化就要在兩個文件中更新代碼的風險,
若是經過props傳值很快會變得混亂, 從而迫使維護者在使用組件的時候必須理解一大段的上下文,拖慢寫代碼速度vue
使用mixin, vue中的mixin對編寫函數式風格的代碼頗有用, 由於函數式編程就是經過減小移動的部分讓代碼更好理解. mixin容許你封裝一塊在應用的其餘組件均可以使用的函數, 若是使用得當,他們不會改變函數做用域外部的任何東西.node
咱們有一對不一樣的組件,他們的做用是經過切換狀態來展現或者隱藏模態框或者提示框, 這些提示框和模態框除了功能類似之外,沒有其餘共同點. 他們看起來不同,用法不同,可是邏輯同樣~~~~編程
// 模態框 const Modal = { template: '#modal', data() { return { isShowing: false } }, methods: { toggleShow() { this.isShowing = !this.isShowing; } }, components: { appChild: Child } } // 提示框 const Tooltip = { template: '#tooltip', data() { return { isShowing: false } }, methods: { toggleShow() { this.isShowing = !this.isShowing; } }, components: { appChild: Child } }
咱們能夠在這裏提取邏輯並建立能夠被重用的項api
const toggle = { data() { return { isShowing: false } }, methods: { toggleShow() { this.isShowing = !this.isShowing; } } } const Modal = { template: '#modal', mixins: [toggle], components: { appChild: Child } }; const Tooltip = { template: '#tooltip', mixins: [toggle], components: { appChild: Child } };
<template> <div> <p v-show="isShowing">模態框顯示</p> <div @click="toggleShow">點擊顯示隱藏</div> </div> </template> <script> import { toggle } from './mixins/toggle' export default { name: 'modal', data() { return { } }, mixins: [toggle] } </script>
當組件和混入對象有同名選項時,這個選項會以恰當的方式進行合併數組
vue容許自定義組件. 有些狀況下, 也須要對原生dom進行操做.這時候就須要使用自定義組件
例子: 輸入框,默認聚焦app
<input v-focus /> directives: { focus: { inserted: function (el) { el.focus(); } } }
一個自定義組件有如下鉤子函數dom
vue容許你自定義過濾器. 可被用於一些經常使用的文件格式化.過濾器能夠用在兩個地方:雙花括號插值和 v-bind
表達式 (後者從 2.1.0+ 開始支持)。過濾器應該被添加在 JavaScript 表達式的尾部,由「管道」符號指示:函數式編程
<input v-focus v-model="message" /> <div id="hook-arguments-example">{{message | capitalize}}</div> filters: { capitalize: function (value) { return value.toUpperCase() } }