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