摘要:指令的職責(zé)是,當(dāng)表達(dá)式的值改變時(shí),將其產(chǎn)生的連帶影響,響應(yīng)式地作用于。對(duì)象形式佐客湯姆咪口修飾符修飾符是以半角句號(hào)指明的特殊后綴,用于指出一個(gè)指令應(yīng)該以特殊方式綁定。修飾符修飾符允許你控制由精確的系統(tǒng)修飾符組合觸發(fā)的事件。
指令
指令(Directives)是帶有v-前綴的特殊屬性。指令的職責(zé)是,當(dāng)表達(dá)式的值改變時(shí),將其產(chǎn)生的連帶影響,響應(yīng)式地作用于DOM。
v-if條件判斷Title
Paragraph 1
Paragraph 2
元素當(dāng)做不可見的包裹元素
ABNot A/B/C
v-if是惰性的:如果在初始渲染時(shí)條件為假,則什么也不做——直到條件第一次變?yōu)檎鏁r(shí),才會(huì)開始渲染條件塊。
v-show顯示判斷Hello!
與v-if不同,v-show只是進(jìn)行CSS的變換。
v-bind屬性綁定...
綁定url到href,當(dāng)url有變化可響應(yīng)dom重渲染,可縮寫成
...v-on事件綁定
...
綁定doSomething函數(shù)到a標(biāo)簽的點(diǎn)擊事件,可縮寫成
...v-for循環(huán)
可循環(huán)渲染動(dòng)態(tài)選項(xiàng),數(shù)組形式
與react不同,react需要使用map方法遍歷返回組件,vue直接把循環(huán)掛在標(biāo)簽屬性上。
對(duì)象形式
data: { options: { jock: "佐客", tom: "湯姆", miko: "咪口" } }修飾符
修飾符(Modifiers)是以半角句號(hào).指明的特殊后綴,用于指出一個(gè)指令應(yīng)該以特殊方式綁定。例如,.prevent修飾符告訴v-on指令對(duì)于觸發(fā)的事件調(diào)用 event.preventDefault():
事件修飾符.prevent => event.preventDefault()
.stop => event.stopPropagation()
.capture 使用事件捕獲
.self 只當(dāng)在 event.target 是當(dāng)前元素自身時(shí)觸發(fā)處理函數(shù),即事件不是從內(nèi)部元素觸發(fā)的
.once 事件只觸發(fā)一次
按鍵修飾符全部的按鍵別名:
.enter
.tab
.delete (捕獲“刪除”和“退格”鍵)
.esc
.space
.up
.down
.left
.right
系統(tǒng)修飾鍵.ctrl
.alt
.shift
.meta
在 Mac 系統(tǒng)鍵盤上,meta 對(duì)應(yīng) command 鍵 (?)。在 Windows 系統(tǒng)鍵盤 meta 對(duì)應(yīng) Windows 徽標(biāo)鍵 (?)。
.exact 修飾符.exact 修飾符允許你控制由精確的系統(tǒng)修飾符組合觸發(fā)的事件。
鼠標(biāo)按鈕修飾符
.left
.right
.middle
這些修飾符會(huì)限制處理函數(shù)僅響應(yīng)特定的鼠標(biāo)按鈕。
計(jì)算屬性computed基礎(chǔ)例子如下
Original message: "{{ message }}"
Computed reversed message: "{{ reversedMessage }}"
var vm = new Vue({ el: "#example", data: { message: "Hello" }, computed: { // 計(jì)算屬性的 getter reversedMessage: function () { // `this` 指向 vm 實(shí)例 return this.message.split("").reverse().join("") } } })
computed下的reversedMessage方法依賴data下的變量message,當(dāng)message發(fā)生變量,reversedMessage會(huì)重新計(jì)算結(jié)果,與mobx中的computed的作用相同。
以上例子也可通過method屬性完成,如下
Reversed message: "{{ reversedMessage() }}"
// 在組件中 methods: { reversedMessage: function () { return this.message.split("").reverse().join("") } }
不同的是計(jì)算屬性是基于它們的依賴進(jìn)行緩存的。
計(jì)算屬性computed也可同時(shí)設(shè)置setter和getter方法取代直接寫funciton,如下:
computed: { fullName: { // getter get: function () { return this.firstName + " " + this.lastName }, // setter set: function (newValue) { var names = newValue.split(" ") this.firstName = names[0] this.lastName = names[names.length - 1] } } }偵聽器watch
new Vue({ data: { watchData: "" }, watch: { watchData: function (newData, oldData) { // doSomething } } })Class與Style class的對(duì)象形式,與classnames模塊類似
class數(shù)組形式
data: { activeClass: "active", errorClass: "text-danger" }class對(duì)象與數(shù)組混合使用
在組件上使用
Vue.component("my-component", { template: "" })
結(jié)果為:
style對(duì)象形式
data: { activeColor: "red", fontSize: 30 }style數(shù)組形式
表單輸入綁定
v-model指令在表單input及textarea元素上創(chuàng)建雙向數(shù)據(jù)綁定。它會(huì)根據(jù)控件類型自動(dòng)選取正確的方法來更新元素。v-model會(huì)忽略所有表單元素的value、checked、selected特性的初始值而總是將Vue實(shí)例的數(shù)據(jù)作為數(shù)據(jù)來源。你應(yīng)該通過JavaScript在組件的data選項(xiàng)中聲明初始值。
如:
Message is: {{ message }}
多行文本
Multiline message is:.lazy{{ message }}
在默認(rèn)情況下,v-model 在每次 input 事件觸發(fā)后將輸入框的值與數(shù)據(jù)進(jìn)行同步。你可以添加 lazy 修飾符,從而轉(zhuǎn)變?yōu)槭褂?change 事件進(jìn)行同步:
.number
如果想自動(dòng)將用戶的輸入值轉(zhuǎn)為數(shù)值類型,可以給 v-model 添加 number 修飾符:
.trim如果要自動(dòng)過濾用戶輸入的首尾空白字符,可以給 v-model 添加 trim 修飾符:
組件組件 (Component) 是Vue.js最強(qiáng)大的功能之一。組件可以擴(kuò)展HTML元素,封裝可重用的代碼。在較高層面上,組件是自定義元素,Vue.js的編譯器為它添加特殊功能。在有些情況下,組件也可以表現(xiàn)為用is特性進(jìn)行了擴(kuò)展的原生 HTML 元素。
請(qǐng)注意,對(duì)于自定義標(biāo)簽的命名Vue.js不強(qiáng)制遵循W3C規(guī)則 (小寫,并且包含一個(gè)短杠),盡管這被認(rèn)為是最佳實(shí)踐。
全局注冊(cè)組件
Vue.component("my-component", { // 選項(xiàng) })
局部注冊(cè)組件
var Child = { template: "A custom component!" } new Vue({ // ... components: { //將只在父組件模板中可用 "my-component": Child } })
由于html元素之間不能隨意嵌套,如table、ul、ol,所以在自定義組件中使用這些受限制的元素時(shí)會(huì)導(dǎo)致一些問題,例如:
自定義組件
但是如果代碼來自以下字符串模板,則沒有這個(gè)限制:
JavaScript 內(nèi)聯(lián)模板字符串
.vue 組件
data必須是函數(shù)聲明的組件data必須為一個(gè)函數(shù)并返回響應(yīng)數(shù)據(jù),否則會(huì)出現(xiàn)警告并停止運(yùn)行,聲明比如類似如下:
var data = { counter: 0 } Vue.component("simple-counter", { template: "", // 技術(shù)上 data 的確是一個(gè)函數(shù)了,因此 Vue 不會(huì)警告, // 但是我們卻給每個(gè)組件實(shí)例返回了同一個(gè)對(duì)象的引用 data: function () { return { counter: 0 } } }) new Vue({ el: "#example-2" })Prop
與react類似,prop為傳入組件的參數(shù),屬于單向數(shù)據(jù)流,如果是綁定了父組件的data,變化會(huì)引起DOM重渲染,聲明組件時(shí)候需要聲明預(yù)期的props,如下:
Vue.component("child", {
// 聲明 props
props: ["message"],
// 就像 data 一樣,prop 也可以在模板中使用
// 同樣也可以在 vm 實(shí)例中通過 this.message 來使用
template: "{{ message }}"
})
由于HTML不區(qū)分大小寫,聲明prop的時(shí)候我們需要聲明為camelCase駝峰命名形式,但是傳入的時(shí)候必須寫成kebab-case短橫線分隔式命名。如下:
Vue.component("child", {
// 在 JavaScript 中使用 camelCase
props: ["myMessage"],
template: "{{ myMessage }}"
})
動(dòng)態(tài)Prop
可以用 v-bind 來動(dòng)態(tài)地將 prop 綁定到父組件的數(shù)據(jù)。每當(dāng)父組件的數(shù)據(jù)變化時(shí),該變化也會(huì)傳導(dǎo)給子組件:
new Vue({ el: "#prop-example-2", data: { parentMsg: "Message from parent" } })
prop聲明時(shí)可以指定特定規(guī)則,規(guī)范prop的格式,如:
Vue.component("example", { props: { // 基礎(chǔ)類型檢測(cè) (`null` 指允許任何類型) propA: Number, // 可能是多種類型 propB: [String, Number], // 必傳且是字符串 propC: { type: String, required: true }, // 數(shù)值且有默認(rèn)值 propD: { type: Number, default: 100 }, // 數(shù)組/對(duì)象的默認(rèn)值應(yīng)當(dāng)由一個(gè)工廠函數(shù)返回 propE: { type: Object, default: function () { return { message: "hello" } } }, // 自定義驗(yàn)證函數(shù) propF: { validator: function (value) { return value > 10 } } } })
type也可以是一個(gè)自定義構(gòu)造器函數(shù),使用instanceof檢測(cè)。
動(dòng)態(tài)組件通過使用保留的
var vm = new Vue({ el: "#example", data: { currentView: "home" }, components: { home: { /* ... */ }, posts: { /* ... */ }, archive: { /* ... */ } } })
也可以直接綁定到組件對(duì)象上:
var Home = { template: "插槽Welcome home!
" } var vm = new Vue({ el: "#example", data: { currentView: Home } })
假定 my-component 組件有如下模板:
我是子組件的標(biāo)題
只有在沒有要分發(fā)的內(nèi)容時(shí)才會(huì)顯示。
父組件模板:
我是父組件的標(biāo)題
這是一些初始內(nèi)容
這是更多的初始內(nèi)容
渲染結(jié)果:
我是父組件的標(biāo)題
我是子組件的標(biāo)題
這是一些初始內(nèi)容
這是更多的初始內(nèi)容
例如,假定我們有一個(gè) app-layout 組件,它的模板為:
父組件模板:
這里可能是一個(gè)頁面標(biāo)題
主要內(nèi)容的一個(gè)段落。
另一個(gè)主要段落。
這里有一些聯(lián)系信息
渲染結(jié)果為:
這里可能是一個(gè)頁面標(biāo)題
主要內(nèi)容的一個(gè)段落。
另一個(gè)主要段落。
在設(shè)計(jì)組合使用的組件時(shí),內(nèi)容分發(fā) API 是非常有用的機(jī)制。
子組件引用但是有時(shí)仍然需要在JavaScript中直接訪問子組件。與react類似,可以使用ref為子組件指定一個(gè)引用ID。例如:
var parent = new Vue({ el: "#parent" }) // 訪問子組件實(shí)例 var child = parent.$refs.profile
當(dāng)ref和v-for一起使用時(shí),獲取到的引用會(huì)是一個(gè)數(shù)組,包含和循環(huán)數(shù)據(jù)源對(duì)應(yīng)的子組件。
自定義事件 使用 v-on 綁定自定義事件使用 $on(eventName) 監(jiān)聽事件
使用 $emit(eventName, optionalPayload) 觸發(fā)事件
例子如下:
{{ msg }}
Vue.component("button-message", { template: `給組件綁定原生事件`, data: function () { return { message: "test message" } }, methods: { handleSendMessage: function () { this.$emit("message", { message: this.message }) } } }) new Vue({ el: "#message-event-example", data: { messages: [] }, methods: { handleMessage: function (payload) { this.messages.push(payload.message) } } })
可以使用v-on的修飾符.native。例如:
.sync修飾符
該修飾符可以讓一個(gè)prop變成"雙向綁定",如下
當(dāng)comp內(nèi)修改了foo變量時(shí),父組件的foo也會(huì)同時(shí)被修改,該修飾符Vue2.0后被移除,在Vue2.3又被引入,只是這次它只是作為一個(gè)編譯時(shí)的語法糖存在。它會(huì)被擴(kuò)展為一個(gè)自動(dòng)更新父組件屬性的 v-on 監(jiān)聽器。如上例子會(huì)被擴(kuò)展成:
bar = val">
當(dāng)子組件需要更新 foo 的值時(shí),它需要顯式地觸發(fā)一個(gè)更新事件:
this.$emit("update:foo", newValue)自定義組件的v-model
默認(rèn)情況下,一個(gè)組件的 v-model 會(huì)使用 value prop 和 input 事件。但是諸如單選框、復(fù)選框之類的輸入類型可能把 value 用作了別的目的。model 選項(xiàng)可以避免這樣的沖突:
Vue.component("my-checkbox", { model: { prop: "checked", event: "change" }, props: { checked: Boolean, // 這樣就允許拿 `value` 這個(gè) prop 做其它事了 value: String }, // ... })
上述代碼等價(jià)于:
{ foo = val }" value="some value">
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/94320.html
摘要:菜鳥教程這是一個(gè)屬性其值是字符串菜鳥教程同上這是一個(gè)屬性其值是字符串用于定義的函數(shù),可以通過來返回函數(shù)值。它們都有前綴,以便與用戶定義的屬性區(qū)分開來。 開篇語 我最近學(xué)習(xí)了js,取得進(jìn)步,現(xiàn)在學(xué)習(xí)vue.js.建議新手學(xué)習(xí),請(qǐng)不要用npm的方式(vue-cli,vue腳手架),太復(fù)雜了. 請(qǐng)直接下載vue.js文件本地引入,就上手學(xué)習(xí)吧參照菜鳥教程網(wǎng)站的vue.js教程http://...
摘要:有興趣的同學(xué)可以查看之前發(fā)布的文章學(xué)習(xí)系列一學(xué)習(xí)實(shí)踐筆記附學(xué)習(xí)系列二學(xué)習(xí)實(shí)踐筆記附學(xué)習(xí)系列三和網(wǎng)絡(luò)傳輸相關(guān)知識(shí)的學(xué)習(xí)實(shí)踐學(xué)習(xí)系列四打包工具的使用學(xué)習(xí)系列五從來聊聊學(xué)習(xí)系列項(xiàng)目地址項(xiàng)目暫時(shí)有點(diǎn)亂,之后會(huì)進(jìn)行整理優(yōu)化。 上次學(xué)習(xí)了vue-router的使用,讓我能夠在各個(gè)頁面間切換,將頁面搭建了起來。這次則要學(xué)習(xí)vue的狀態(tài)管理模式——vuex。它類似于redux來應(yīng)用的全局狀態(tài)。 注:本...
摘要:建立該倉庫的目的主要是整理收集學(xué)習(xí)資源,統(tǒng)一管理,方便隨時(shí)查找。目前整合的學(xué)習(xí)資源只是前端方向的,可能會(huì)存在漏缺比較好的資源,需要慢慢的完善它,歡迎在該上補(bǔ)充資源或者提供寶貴的建議。 說明 平時(shí)的學(xué)習(xí)資源都比較的凌亂,看到好的資源都是直接收藏在瀏覽器的收藏夾中,這樣其實(shí)并不方便,整理在云筆記上,也不方便查看修改記錄,索性就整理在 github 上并開源出來,希望幫助大家能夠更快的找到需...
摘要:提供了兩種向組件傳遞參數(shù)的方式。子路由項(xiàng)路徑不要使用開頭,以開頭的嵌套路徑會(huì)被當(dāng)作根路徑。路由實(shí)例的方法這里學(xué)習(xí)兩個(gè)路由實(shí)例的方法和。實(shí)際上,是通過不同的將這些資源加載后打包,然后輸出打包后文件。 一、vue-router 1、簡介 我們經(jīng)常使用vue開發(fā)單頁面應(yīng)用程序(SPA)。在開發(fā)SPA過程中,路由是必不可少的部分,vue的官方推薦是vue-router。單頁面應(yīng)用程序看起來好像...
摘要:提供了兩種向組件傳遞參數(shù)的方式。子路由項(xiàng)路徑不要使用開頭,以開頭的嵌套路徑會(huì)被當(dāng)作根路徑。路由實(shí)例的方法這里學(xué)習(xí)兩個(gè)路由實(shí)例的方法和。實(shí)際上,是通過不同的將這些資源加載后打包,然后輸出打包后文件。 一、vue-router 1、簡介 我們經(jīng)常使用vue開發(fā)單頁面應(yīng)用程序(SPA)。在開發(fā)SPA過程中,路由是必不可少的部分,vue的官方推薦是vue-router。單頁面應(yīng)用程序看起來好像...
閱讀 3031·2021-11-24 09:39
閱讀 2268·2021-10-08 10:05
閱讀 2758·2021-09-24 13:52
閱讀 1576·2021-09-22 15:07
閱讀 595·2019-08-30 15:55
閱讀 1814·2019-08-30 15:53
閱讀 694·2019-08-30 15:44
閱讀 3122·2019-08-30 11:20