詳細(xì)聊聊Vue中的options選項(xiàng)
Vue中的options選項(xiàng)
options的五類屬性
- 數(shù)據(jù): data,props,propsdata,computed,methods,watch
- DON: el,template,render,rebderError
- 生命周期鉤子函數(shù):beforeCreate,created,beforeMount,mounted,beforeUpdate,updated,activated,deactivated,beforeDestroy,destroyed,erroCaptured。
- 資源:directives,filters,components
- 組合:parent,mxins,extends,provide,inject
入門屬性
- el(掛在點(diǎn))
new Vue({ el:"#app" template:`<div>我是小明</div>` }) 可以使用$mount代替 new Vue({ template:`<div>我是小明</div>` }).$mount("#app")
- data(內(nèi)部數(shù)據(jù))支持對(duì)象和函數(shù),優(yōu)先使用函數(shù)
- 會(huì)被Vue監(jiān)聽
- 會(huì)被Vue實(shí)例代理
- 每次data的讀寫都會(huì)被Vue監(jiān)聽
- Vue會(huì)在data變化是更新UI
對(duì)象 new Vue({ template:"<div>{{n}}</div>", data:{ n:0 } }).$mount('#app') 函數(shù) vue非完整版只支持函數(shù) new Vue({ template:"<div>{{n}}</div>", data(){ return { m:5 } } })$mount('#app')
- methods(方法)事件處理函數(shù)或者普通函數(shù)
new Vue({ template:"<div>{{n}}{{ add()}} <button @click="add">按鈕</button></div>", data:{ n:0 }, methods:{ add(){ console.log('我可以是事件處理函數(shù)也可以是普通函數(shù)') } } }).$mount('#app')
- components(vue組件:注意大小寫)三種方式
注冊(cè)全局組件 Vue.component('Deon1', { template: "<h2>全局組件</h2>" }) 注冊(cè)局部組件 const deon2 = { template: "<h2>局部組件 {{n}}</h2>", //在組建中data必須使用函數(shù) data() { return { n: "小明" } } } new Vue({ components: { Deon2: deon2, Deon3:{ template:"<h2>組件3</h3>" } }, template: ` <div>頁(yè)面 <Deon1></Deon1> <Deon2></Deon2> <Deon3></Deon3> </div> ` }).$mount('#app')
使用vue文件添加組件
deon4.vue文件
<template> <div>我是deon.vue文件{{ name }}</div> </template> <script> export default { data() { name: "組件4"; }, }; </script> <style scoped> div { border: 1px solid red; } </style>
main.js
import Deon4 from './deon4.vue' Vue.component('Deon1', { template: "<h2>全局組件</h2>" }) const deon2 = { template: "<h2>局部組件 {{n}}</h2>", //在組建中data必須使用函數(shù) data() { return { n: "小明" } } } new Vue({ components: { Deon2: deon2, Deon3: { template: "<h2>組件3</h3>" }, Deon4 }, template: ` <div>頁(yè)面 <Deon1></Deon1> <Deon2></Deon2> <Deon3></Deon3> <Deon4><Deon4> </div> ` }).$mount('#app')
- 常用的四個(gè)生命周鉤子函數(shù)
- created: 實(shí)例出現(xiàn)在內(nèi)存中
- mounted:實(shí)例出現(xiàn)在頁(yè)面中觸發(fā)
- updated:實(shí)例出現(xiàn)了變化觸發(fā)
- destroyed:實(shí)例被銷毀了觸發(fā)
new Vue({ template:"<div>{{n}}</div>", data:{ n:0 }, created() { console.log("實(shí)例出現(xiàn)在內(nèi)存中了觸發(fā)"); }, mounted() { console.log("實(shí)例出現(xiàn)在頁(yè)面中觸發(fā)"); }, updated() { console.log("實(shí)例出現(xiàn)了變化觸發(fā)"); }, destroyed() { console.log("實(shí)例被銷毀了觸發(fā)"); } }).$mount('#app')
- props(外部數(shù)據(jù))父組件想子組傳值
- name="n"(傳入字符串)
- :name="n"(傳入this.n數(shù)據(jù))
- :fn="add":(傳入this.add函數(shù))
new Vue({ components: { Deon1: { props: ["m"], template: "<div>{{m}}</div>" } }, template: `<div><Deon1 :m="m"></Deon1></div>`, data: { m: 666 } }).$mount('#app')
computed(計(jì)算屬性)
- 不需要加括號(hào)
- 他會(huì)根據(jù)依賴是否變化來緩存(如果依賴沒有變化,就不會(huì)重新結(jié)算)
- 類型:
{ [key: string]: Function | { get: Function, set: Function } }
用途
緩存
- 如果依賴的屬性沒有變,化就不會(huì)重新計(jì)算
- getter/setter默認(rèn)不會(huì)做緩存,Vue做了特殊處理
- 如何緩存?看示例 這是示例不是Vue的實(shí)現(xiàn)
示例:
var vm = new Vue({ data: { a: 1 }, computed: { // 僅讀取 aDouble: function () { return this.a * 2 }, // 讀取和設(shè)置 aPlus: { get: function () { return this.a + 1 }, set: function (v) { this.a = v - 1 } } } }) vm.aPlus // => 2 vm.aPlus = 3 vm.a // => 2 vm.aDouble // => 4
watch(監(jiān)聽)
- data變化,就會(huì)執(zhí)行函數(shù)
- options.watch用法
- this.$watch用法
- deep:偵聽的對(duì)象的 property 改變時(shí)被調(diào)用,不論其被嵌套多深
- immediate:偵聽開始之后被立即調(diào)用
- 類型:
{ [key: string]: string | Function | Object | Array }
用途
- 當(dāng)數(shù)據(jù)變化時(shí),執(zhí)行一個(gè)函數(shù)
- 例子1撤銷
- 例子2 模擬computed 這樣很傻,一般不這樣做
何為變化
- 看示例
原本 let obj = {a:'a'} 現(xiàn)在 obj={a:'a'} 請(qǐng)問
obj變了沒有. obj.a變了沒有
簡(jiǎn)單類型看至,復(fù)雜類型(對(duì)象)看地址
這其實(shí)就是 ===的規(guī)則
示例:
var vm = new Vue({ data: { a: 1, b: 2, c: 3, d: 4, e: { f: { g: 5 } } }, watch: { a: function (val, oldVal) { console.log('new: %s, old: %s', val, oldVal) }, // 方法名 b: 'someMethod', // 該回調(diào)會(huì)在任何被偵聽的對(duì)象的 property 改變時(shí)被調(diào)用,不論其被嵌套多深 c: { handler: function (val, oldVal) { /* ... */ }, deep: true//監(jiān)聽是否深入 }, // 該回調(diào)將會(huì)在偵聽開始之后被立即調(diào)用 d: { handler: 'someMethod', immediate: true }, // 你可以傳入回調(diào)數(shù)組,它們會(huì)被逐一調(diào)用 e: [ 'handle1', function handle2 (val, oldVal) { /* ... */ }, { handler: function handle3 (val, oldVal) { /* ... */ }, /* ... */ } ], // watch vm.e.f's value: {g: 5} 'e.f': function (val, oldVal) { /* ... */ } } }) vm.a = 2 // => new: 2, old: 1
注意,不應(yīng)該使用箭頭函數(shù)來定義 watcher 函數(shù) (例如 searchQuery: newValue => this.updateAutocomplete(newValue)
)。理由是箭頭函數(shù)綁定了父級(jí)作用域的上下文,所以 this 將不會(huì)按照期望指向 Vue 實(shí)例,this.updateAutocomplete
將是 undefined
deep: true是干什么的?
如果object.a變了,請(qǐng)問object算不算變
如果需要的答案是(也沒變啦),那么就用deep: true
如果需要的答案是(沒有變),那么就用deep: false
deep的意思是監(jiān)聽 object的時(shí)候是否往深了看
computed和watch的區(qū)別
computed計(jì)算屬性
- computed是計(jì)算屬性,也就是依賴某個(gè)值或者props通過計(jì)算得來得數(shù)據(jù);
- computed的值是在getter執(zhí)行之后進(jìn)行緩存的,只有在它依賴的數(shù)據(jù)發(fā)生變化,會(huì)重新調(diào)用getter來計(jì)算;
- 不支持異步,當(dāng)computed內(nèi)有異步操作時(shí)無效,無法監(jiān)聽數(shù)據(jù)的變化
- 調(diào)用時(shí)不需要加括號(hào)
watch 監(jiān)聽器
- watch是監(jiān)聽器,可以監(jiān)聽某一個(gè)數(shù)據(jù),然后執(zhí)行相應(yīng)的操作;
- 不支持緩存,數(shù)據(jù)變直接會(huì)觸發(fā)相應(yīng)的操作;
- 監(jiān)聽的函數(shù)接收兩個(gè)參數(shù),第一個(gè)參數(shù)是最新的值;第二個(gè)參數(shù)是輸入之前的值;
- 支持異步操作;
- deep選項(xiàng):偵聽的對(duì)象的 property 改變時(shí)被調(diào)用,不論其被嵌套多深
- immediate:為true時(shí)偵聽開始之后被立即調(diào)用
總結(jié)
到此這篇關(guān)于Vue中options選項(xiàng)的文章就介紹到這了,更多相關(guān)Vue的options選項(xiàng)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Vue3中使用echarts的簡(jiǎn)單七個(gè)步驟(易懂,附緊急避坑)
近期在做一個(gè)vue3的項(xiàng)目,里面有個(gè)圖表需求,因公司之前使用第三方封裝的圖表缺少文檔,就去看了echars的官網(wǎng)文檔,引入原生echars來實(shí)現(xiàn),下面這篇文章主要給大家介紹了關(guān)于Vue3中使用echarts的簡(jiǎn)單七個(gè)步驟,需要的朋友可以參考下2023-01-01Vue.js實(shí)現(xiàn)圖片的隨意拖動(dòng)方法
下面小編就為大家分享一篇Vue.js實(shí)現(xiàn)圖片的隨意拖動(dòng)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-03-03Vue.js實(shí)現(xiàn)可配置的登錄表單代碼詳解
這篇文章主要介紹了Vue.js實(shí)現(xiàn)可配置的登錄表單實(shí)例代碼詳解,文中給大家補(bǔ)充介紹了vue.js 全選與取消全選的實(shí)例代碼,需要的朋友可以參考下2018-03-03Vue3項(xiàng)目中引用TS語法的實(shí)例講解
這篇文章主要介紹了Vue3項(xiàng)目中引用TS語法的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05vue3應(yīng)用elementPlus table并滾動(dòng)顯示問題
這篇文章主要介紹了vue3應(yīng)用elementPlus table并滾動(dòng)顯示問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12vue實(shí)現(xiàn)的網(wǎng)易云音樂在線播放和下載功能案例
這篇文章主要介紹了vue實(shí)現(xiàn)的網(wǎng)易云音樂在線播放和下載功能,結(jié)合具體實(shí)例形式分析了網(wǎng)易云音樂相關(guān)接口調(diào)用與操作技巧,需要的朋友可以參考下2019-02-02