Vue 構(gòu)造選項 - 進階使用說明
Directive指令:減少DOM操作的重復(fù)
Vue實例/組件用于數(shù)據(jù)綁定、事件監(jiān)聽、DOM更新
Vue指令主要目的就是原生DOM操作
減少重復(fù)
兩種聲明方式
方法一:聲明一個全局指令
Vue.directive('x', directiveOptions)
方法二:聲明一個局部指令
在options里寫,只能被那個Vue實例/組件使用
new Vue({ ..., directives:{ "x":directiveOptions } })
關(guān)于directiveOptions
directiveOptions是個對象,里面有五個函數(shù)屬性
bind(el, info, vnode, oldVnode)★
類似created
,只調(diào)用一次,指令第一次綁定到元素時調(diào)用。
參數(shù)都是vue給我們的
① el
綁定指令的那個元素
② info
是個對象,我們想要的信息基本都在里面
③ vnode
虛擬節(jié)點
④ oldVnode
之前的虛擬節(jié)點
inserted
(參數(shù)同上)★
類似mounted
,被綁定元素插入父節(jié)點時調(diào)用 (僅保證父節(jié)點存在,但不一定已被插入文檔中)。
update
(參數(shù)同上)
類似 updated
componentUpdated
(參數(shù)同上)
用得不多,見文檔
unbind
(參數(shù)同上)★
類似destroyed
,當(dāng)元素要消亡時調(diào)用。
Mixins混入:復(fù)制
減少重復(fù)
directives的作用是減少DOM操作的重復(fù)
mixins的作用是減少data、methods、鉤子的重復(fù)
options里的構(gòu)造選項都可以先放到一個js文件,之后哪個實例/組件需要就導(dǎo)入并且用mixins使用就行。
寫在了共同東西里的東西被組件引用了之后,組件還可以覆蓋他們,Vue會智能合并
全局的mixins:不推薦
Extends 繼承、擴展
extends是比mixins更抽象一點的封裝
如果你嫌寫五次mixins麻煩,可以考慮extends一次
不過實際工作中用得很少
你可以使用Vue.extend或options.extends
provide & inject:提供&注入
祖先提供東西,后代注入東西
作用是大范圍、隔N代共享信息(data、methods等)
總結(jié)
directive指令
全局用Vue.directive('x', {...})
局部用options.directives
作用是減少DOM操作相關(guān)重復(fù)代碼
mixins混入
全局用Vue.mixin({..})
局部用options.mixins: [mixin1, mixin2]
作用是減少options里的重復(fù)
extends繼承/擴展
全局用Vue.extend({.})
局部用options.extends: {...}
作用跟mixins差不多,只是形式不同
provide | inject提供和注入
祖先提供東西,后代注入東西
作用是大范圍、隔N代共享信息
補充知識:表單和 v-model
思維導(dǎo)圖
form 做表單一定要用 form+button組合
<template> <div id="app"> 登錄 <form @submit.prevent="onSubmit"> //.prevent阻止默認(rèn)動作 <label> <span>用戶名</span> <input type="text" v-model="user.username"/> </label> <label> <span>密碼</span> <input type="password" v-model="user.password"/> </label> <button type="submit"> 登錄 </button> </form> </div> </template> <script> export default { name: 'App', data() { return { user: { username: '', password: '' }, x: '' } }, methods: { onSubmit() { console.log(this.user) } }, components: {} } </script>
v-model
<label> <span>用戶名</span> <input type="text" v-model="user.username"/> </label>
上面的v-model等價于
<label> <span>用戶名</span> <input type="text" :value="user.username" @input = "user.username = $event.target.value"/> </label>
自己封裝一個
<template> <div class="red wrapper"> <input :value="value" @input="$emit('input',$event.target.value)"/> </div> </template> <script> export default { name: 'MyInput', props: { value: { type: String } }, } </script> <style scoped> .red { background: red; } .wrapper{ display: inline-block; } </style>
以上這篇Vue 構(gòu)造選項 - 進階使用說明就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
vue項目debugger調(diào)試看不到源碼的問題及解決
這篇文章主要介紹了vue項目debugger調(diào)試看不到源碼的問題及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-06-06vuex 中輔助函數(shù)mapGetters的基本用法詳解
mapGetters輔助函數(shù)僅僅是將 store 中的 getter 映射到局部計算屬性,在組件或界面中不使用mapGetter調(diào)用映射vuex中的getter,在組件或界面中使用mapGetter調(diào)用映射vuex中的getter,具體內(nèi)容跟隨小編一起通過本文學(xué)習(xí)吧2021-07-07詳解vue3.2中setup語法糖<script?lang="ts"?setup>
Vue 3.2 引入了語法,這是一種稍微不那么冗長的聲明組件的方式,下面這篇文章主要介紹了詳解vue3.2中setup語法糖<script?lang="ts"setup>的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2023-01-01vue.js樣式布局Flutter業(yè)務(wù)開發(fā)常用技巧
這篇文章主要為大家介紹了vue.js樣式布局Flutter業(yè)務(wù)開發(fā)中的常用技巧,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪2021-11-11vue3+vite使用vite-plugin-svg-icons插件顯示本地svg圖標(biāo)的方法
這篇文章主要介紹了vue3+vite使用vite-plugin-svg-icons插件顯示本地svg圖標(biāo)的方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-12-12