摘要:以下內(nèi)容根據(jù)部分速記。同時,需要在父組件標(biāo)簽中添加這個屬性,該屬性才能傳遞到子組件內(nèi)。把父組件傳遞的數(shù)據(jù)當(dāng)做子組件的初始值。
以下內(nèi)容根據(jù)Vue.js Guide Essentials部分速記。
不含動畫/mixin/SSR/路由/狀態(tài)管理等部分.
建議閱讀原文 https://vuejs.org/v2/guide/in...
什么是VueThe Vue Instance
開始
聲明式渲染
條件與循環(huán)
處理用戶輸入
組件
建議閱讀原文 https://vuejs.org/v2/guide/in...
創(chuàng)建Vue實例Template Syntax
data & methods
實例生命周期及其鉤子函數(shù)
生命周期圖表
模板語法 https://vuejs.org/v2/guide/sy...
Mustache模板中插入值html標(biāo)簽內(nèi)的文本:使用{{變量名}}
原始html:標(biāo)簽屬性內(nèi)使用v-html="變量名"
標(biāo)簽內(nèi)的屬性:v-bind:屬性名="變量名"
也可用JS的表達(dá)式來替換上述"變量名",但只能是單條表達(dá)式,不能是語句
argument:如v-bind:href中的href
modifier:如v-on:submit.prevent="onSubmit"中的.prevent
v-bind:href等同于:href
v-on:click="doSth"等同于@cllick="doSth"
https://vuejs.org/v2/guide/co...
Computed Propertiesjs內(nèi)的computed函數(shù)
computed屬性會被緩存,出于性能考慮,不建議在{{}}中的表達(dá)式內(nèi)執(zhí)行method
computed屬性會被緩存,即使是一個函數(shù),也并不會每次都執(zhí)行
computed是根據(jù)已有變量計算出的新變量
watch用來監(jiān)視已有變量,執(zhí)行進(jìn)一步操作.
Class and Style Bindings(html標(biāo)簽中的)class與style綁定 https://vuejs.org/v2/guide/cl...
classv-bind:class內(nèi)的表達(dá)式會自動和class內(nèi)已有class同時存在
可以:data: { isActive: true, hasError: false } 結(jié)果: 也可以: data: { classObject: { active: true, "text-danger": false } }
也可以使用computed函數(shù)計算出的屬性值/對象為class內(nèi)的屬性值/對象做數(shù)據(jù)來源
也可以使用數(shù)組來應(yīng)用多個class名:
data: { activeClass: "active", errorClass: "text-danger" } 結(jié)果:
與其在array內(nèi)使用三目運算符,不如嵌套使用object與array:
使用js定義組件時的class先出現(xiàn),使用組件時添加的class(無論直接使用class還是v-bind:class)后出現(xiàn).
Vue.component("my-component", { template: "style 內(nèi)聯(lián)樣式 " }) 1.結(jié)果: 2. 結(jié)果:
和class很像,但必須是object
可以: data: { activeColor: "red", fontSize: 30 } 也可以: data: { styleObject: { color: "red", fontSize: "13px" } } 也可以使用computed 也可以用對象數(shù)組: (baseStyles/overridingStyles都是object)
使用v-bind:style會自動加上prefix
也可以手動加:
Conditional Rendering
條件渲染 https://vuejs.org/v2/guide/co...
v-if/v-else/v-else-ifYes
也可以配合else使用:No
v-if可以和template元素結(jié)合使用,最終結(jié)果不包含template標(biāo)簽:
Title
Paragraph 1
Paragraph 2
v-else必須緊跟v-if或v-else-if
v-else-if:
ABCNot A/B/C
v-else-if必須緊跟v-if或v-else-if
相同元素自動復(fù)用:
修改loginType的值不會產(chǎn)生新的input元素
會自動復(fù)用之前的元素
如果想避免自動復(fù)用,給input標(biāo)簽加上不同的key:
(label標(biāo)簽依然會被復(fù)用,因為沒有指定key)v-show
只控制css的display.
不支持template元素,不支持和v-else同時使用
經(jīng)常切換顯示隱藏,使用v-show
偶爾顯示,變動少,使用v-if
v-for的優(yōu)先級高.(見下一節(jié))
List Rendering列表渲染 https://vuejs.org/v2/guide/li...
v-for遍歷arrayv-for內(nèi)部可以訪問外部的所有變量,
還可以獲取index:
或者:
{{ key }}: {{ value }}{{ index }}. {{ key }}: {{ value }}(有index/鍵名/值)
內(nèi)部引擎使用Object.keys()來遍歷,不保證所有瀏覽器都表現(xiàn)一致
key如果數(shù)據(jù)的順序變動,vue不是調(diào)整各個子元素的順序,而是直接修改現(xiàn)有子元素的內(nèi)容
為了規(guī)避以上情況,可以給每個子元素綁定key:
探測數(shù)組更改情況
以下的數(shù)組方法都已經(jīng)被Vue封裝好,vue可以觀察到原有數(shù)組的更改
push() pop() shift() unshift() splice() sort() reverse()
替換數(shù)組:
filter() concat() slice() ...
以上方法不改變原有數(shù)組,直接返回新數(shù)組.
vue的使用方法如下:
example1.items = example1.items.filter(function (item) { return item.message.match(/Foo/) })數(shù)組更改警告
由于JS的限制,以下兩種情況無法被vue觀察到,請使用替代方案:
直接用索引設(shè)置某項的值
// Vue.set Vue.set(example1.items, indexOfItem, newValue) 或者 // Array.prototype.splice example1.items.splice(indexOfItem, 1, newValue)
修改數(shù)組的長度
example1.items.splice(newLength)對象更改警告
由于JS限制,vue觀察不到動態(tài)添加根級別的屬性到已有的實例:
var vm = new Vue({ data: { a: 1 } }) // `vm.a` is now reactive vm.b = 2 // `vm.b` is NOT reactive
但是允許內(nèi)層的object添加屬性:
var vm = new Vue({ data: { userProfile: { name: "Anika" } } }) 可以使用 Vue.set(vm.userProfile, "age", 27) 或者 vm.$set(this.userProfile, "age", 27)
如果需要更新多個屬性,直接使用添加屬性后的新對象替換原有對象,
不要:
Object.assign(this.userProfile, { age: 27, favoriteColor: "Vue Green" })
而應(yīng)該這樣:
this.userProfile = Object.assign({}, this.userProfile, { age: 27, favoriteColor: "Vue Green" })篩選與排序
不對原始數(shù)據(jù)修改,僅對需要顯示的作篩選排序等.
靈活運用computed或methods:
computed:
v-for可以直接遍歷整數(shù):
v-for on a{{ n }}
與v-if類似,可以結(jié)合template使用
v-for has a higher priority than v-if.
v-if將在每個for循環(huán)內(nèi)都執(zhí)行
如果想先if出結(jié)果,再for循環(huán),請嵌套使用(也可用template):
No todos left!
v-for與組件可以在自定義組件內(nèi)使用v-for,就像其他普通元素一樣.
在組件內(nèi)使用v-for, :key為必須的
但仍需注意父子組件之間的數(shù)據(jù)傳遞.
(子組件的js內(nèi)使用props, 標(biāo)簽內(nèi)使用v-bind:變量名,使用$emit與父組件通信)
事件處理 https://vuejs.org/v2/guide/ev...
標(biāo)簽內(nèi)使用v-on:事件名="xxx"
xxx可以是表達(dá)式(直接修改數(shù)據(jù))
var example1 = new Vue({ el: "#example-1", data: { counter: 0 } })The button above has been clicked {{ counter }} times.
也可以是method方法名
var example2 = new Vue({ el: "#example-2", data: { name: "Vue.js" }, // define methods under the `methods` object methods: { greet: function (event) { // `this` inside methods points to the Vue instance alert("Hello " + this.name + "!") // `event` is the native DOM event if (event) { alert(event.target.tagName) } } } }) // you can invoke methods in JavaScript too example2.greet() // => "Hello Vue.js!"
也可以是一段js語句,可以選擇性地傳遞參數(shù)到method內(nèi):
new Vue({ el: "#example-3", methods: { say: function (message) { alert(message) } } })
可以傳遞原始的DOM event參數(shù),使用$event:
// ... methods: { warn: function (message, event) { // now we have access to the native event if (event) event.preventDefault() alert(message) } }Event Modifiers 事件修飾符
可以多個同時使用,也可以只使用修飾符,不指定事件handler
.stop 停止向上傳播 .prevent preventDefault .capture 捕獲子元素內(nèi)已處理的事件 .self 只管本元素的事件,不考慮子元素 .once 觸發(fā)至多一次,可以用在組件的自定義事件中
修飾符是有順序的.
Therefore using @click.prevent.self will prevent all clicks while @click.self.prevent will only prevent clicks on the element itself.
完整的按鍵修飾符:
.enter .tab .delete (captures both “Delete” and “Backspace” keys) .esc .space .up .down .left .right
自定義按鍵修飾符:
// enable `v-on:keyup.f1` Vue.config.keyCodes.f1 = 112自動按鍵修飾符
可以根據(jù)KeyboardEvent.key的名稱,轉(zhuǎn)換為小寫-小寫的形式,作為按鍵修飾符.
如: .page-down
In the above example, the handler will only be called if $event.key === "PageDown".系統(tǒng)按鍵修飾符
.ctrl .alt .shift .meta
Note: On Macintosh keyboards, meta is the command key (?). On Windows keyboards, meta is the windows key (?). On Sun Microsystems keyboards, meta is marked as a solid diamond (◆). On certain keyboards, specifically MIT and Lisp machine keyboards and successors, such as the Knight keyboard, space-cadet keyboard, meta is labeled “META”. On Symbolics keyboards, meta is labeled “META” or “Meta”..exact
多帶帶按某個鍵,而不是組合按鍵中的其中一個鍵
鼠標(biāo)按鈕修飾符
.left .right .middleForm Input Bindings
表單輸入綁定 https://vuejs.org/v2/guide/fo...
input(輸入框、單選、多選)、textarea、select單選多選 等
v-model,將忽略任何標(biāo)簽上的初始值,只把vue實例的data作為數(shù)據(jù)來源
input text textarea input checkbox單選一 一個checkbox綁定到一個v-model,data為Boolean
多選多 多個checkbox綁定到同一個v-model,data為數(shù)組
多選一 多個input radio綁定到同一個v-model,data為字符串,結(jié)果為input標(biāo)簽內(nèi)的value
select單選 建議第一項為一個disabled的option
多選,添加multiple屬性
radio/select options的v-model為字符串,checkbox為布爾值
可以把v-model與自定義的value值做綁定,而不是瀏覽器默認(rèn)的value值.
// when checked: vm.toggle === "yes" // when unchecked: vm.toggle === "no" // when checked: vm.pick === vm.a // when selected: typeof vm.selected // => "object" vm.selected.number // => 123修飾符
轉(zhuǎn)換為數(shù)字類型 去空格Components
組件 https://vuejs.org/v2/guide/co...
使用組件https://vuejs.org/v2/guide/co...
全局注冊、局部注冊
data必須是一個函數(shù)
父子組件的關(guān)系: props down, events up
父組件通過prop把屬性傳遞給子組件;子組件通過觸發(fā)事件,把數(shù)據(jù)傳遞給父組件
https://vuejs.org/v2/guide/co...
使用props傳遞數(shù)據(jù)在子組件的js聲明中,添加props(和data同級),props才能從父組件傳遞到子組件。
同時,需要在父組件標(biāo)簽中添加這個屬性,該屬性才能傳遞到子組件內(nèi)。
html標(biāo)簽內(nèi)不區(qū)分大小寫,所以使用連接橫杠-,js的props內(nèi)使用駝峰式命名法(首字母小寫)
動態(tài)屬性通過v-bind:子組件數(shù)據(jù)名稱=父組件數(shù)據(jù)名稱
也可以v-bind=對象名
todo: { text: "Learn Vue", isComplete: false }標(biāo)簽中的屬性字面量與v-bind:xxx的動態(tài)變量等同于
直接使用屬性,是字面量;v-bind:xx是表達(dá)式。
因此,直接使用屬性,數(shù)據(jù)類型都是字符串;v-bind的在經(jīng)過表達(dá)式運算之后,可以是數(shù)字類型(等等)
父組件的數(shù)據(jù)通過props傳遞給子組件,子組件通過computed或data來進(jìn)行數(shù)據(jù)處理。
不要在子組件直接改變父組件的數(shù)據(jù)。
把父組件傳遞的數(shù)據(jù)當(dāng)做子組件的初始值。
js中的對象和數(shù)組傳遞的是引用值,子組件如果修改,會影響父組件
可以在子組件的js內(nèi),定義父組件需要傳遞給子組件的props名稱、類型、是否必須等
無prop的屬性https://vuejs.org/v2/guide/co...
(子組件的js內(nèi))未定義某個prop,父組件直接在標(biāo)簽上傳入某個prop
通常被用在class、style上
https://vuejs.org/v2/guide/co...
$on/$emit和瀏覽器原生的
EventTarget API
沒有關(guān)系
在父組件的上下文環(huán)境中,使用v-on來監(jiān)聽子組件觸發(fā)($emit)的事件
使用.native修飾符去監(jiān)聽原生事件 使用.sync修飾符Vue.component("button-counter", { template: "", data: function () { return { counter: 0 } }, methods: { incrementCounter: function () { this.counter += 1 this.$emit("increment") } }, }) new Vue({ el: "#counter-event-example", data: { total: 0 }, methods: { incrementTotal: function () { this.total += 1 } } }){{ total }}
實質(zhì)為: bar = val">
在子組件的js內(nèi),需要觸發(fā)update:foo事件來更新foo的值
this.$emit("update:foo", newValue)表單輸入與自定義事件
https://vuejs.org/v2/guide/co...
實質(zhì)為:
如果想讓自定義組件與v-model協(xié)作,自定義組件需要:
accept a value prop
觸發(fā) input 事件,并傳入新值
自定義組件的v-model在js中添加model字段
Vue.component("my-checkbox", { model: { prop: "checked", event: "change" }, props: { checked: Boolean, // this allows using the `value` prop for a different purpose value: String }, // ... })非父子組件之間的通信以上等同于: { foo = val }" value="some value">
使用一個中間Vue實例來傳遞消息,或使用Vuex.
var bus = new Vue() // in component A"s method bus.$emit("id-selected", 1) // in component B"s created hook bus.$on("id-selected", function (id) { // ... })內(nèi)容分發(fā)與slot
https://vuejs.org/v2/guide/co...
單slot用實際使用某個組件時寫入到組件標(biāo)簽內(nèi)的內(nèi)容,
去替換組件原有的模板中的slot的內(nèi)容.
(然后再將組件內(nèi)的所有內(nèi)容合并到父級元素內(nèi))
如果實際使用組件時,組件標(biāo)簽內(nèi)沒有內(nèi)容,
則顯示組件原有的模板中的slot內(nèi)容.
(然后再將組件內(nèi)的所有內(nèi)容合并到父級元素內(nèi))
動態(tài)組件content at parent content at parent"s footer slot
h2 inside p (wrong!!!)
https://vuejs.org/v2/guide/co...
var vm = new Vue({ el: "#example", data: { currentView: "home" }, components: { home: { /* ... */ }, posts: { /* ... */ }, archive: { /* ... */ } } })keep-aliveIf you prefer, you can also bind directly to component objects: var Home = { template: " Welcome home!
" } var vm = new Vue({ el: "#example", data: { currentView: Home } })
雜項
https://vuejs.org/v2/guide/co...
編寫可復(fù)用組件Props/Events/Slots 結(jié)合使用
引用子組件直接用js訪問子組件.
需要在使用子組件時,標(biāo)簽內(nèi)添加ref="xxx"
var parent = new Vue({ el: "#parent" }) // 訪問子組件實例 var child = parent.$refs.profile異步組件
結(jié)合webpack的import()
高級異步組件const AsyncComp = () => ({ // The component to load. Should be a Promise component: import("./MyComp.vue"), // A component to use while the async component is loading loading: LoadingComp, // A component to use if the load fails error: ErrorComp, // Delay before showing the loading component. Default: 200ms. delay: 200, // The error component will be displayed if a timeout is // provided and exceeded. Default: Infinity. timeout: 3000 })組件命名約定
(使用JS)聲明組件時, PascalCase,
(標(biāo)簽內(nèi))使用組件時,
https://vuejs.org/v2/guide/co...
組件之間的相互引用添加beforeCreate 函數(shù)
beforeCreate: function () { this.$options.components.TreeFolderContents = require("./tree-folder-contents.vue") }內(nèi)聯(lián)模板
模板的標(biāo)簽內(nèi)添加inline-template
X-TemplatesVue.component("hello-world", { template: "#hello-world-template" })v-once
很長很長的,只渲染一次的內(nèi)容,比如,用戶協(xié)議.
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/90670.html
摘要:屌絲和女神約好一起喝咖啡,聊天很愉快,分開不久手機(jī)收到女神發(fā)來的一個信息西女一個西女,你的嘴巴和手好白,你的嘴巴和手好白,你的嘴巴和手好白。屌絲看到了這句話頓時懵逼了。其實如果沒有編輯器,你就相當(dāng)于女神,電腦就相當(dāng)于屌絲,他看不懂你寫的。 javascript,當(dāng)今最流行的開發(fā)語言之一,既有它簡單易學(xué)的一面,又有它不同于其它語言奇怪的一面。我們一起通過感受javascript之美這套課...
摘要:前言去年十月開始學(xué)習(xí)一開始寫了一個的爬蟲將自己在過程中的一些經(jīng)驗寫了下來沒想到那么多人支持。但目前也只是處于能用狀態(tài)。及如何將一個文件夾下文件變成一個包呢。而不僅僅是一個服務(wù)器無法理解此請求。 前言 去年十月開始學(xué)習(xí)python一開始寫了一個python的爬蟲 將自己在過程中的一些經(jīng)驗寫了下來沒想到那么多人支 持。之后因為一些實驗室的需求就轉(zhuǎn)投python的web開發(fā) 一開...
1、什么是建造者模式Separate the construction of a complex object from its representation so that the same construction process can create different representations.將一個復(fù)雜對象的構(gòu)建與它的表示分離, 使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。 說人話:將構(gòu)...
摘要:建造者模式實現(xiàn)建造者模式實現(xiàn)創(chuàng)建抽象建造者類創(chuàng)建具體建造者類。建造者模式使用場景建造者模式使用場景相同的方法,不同的執(zhí)行順序,產(chǎn)生不同的事件結(jié)果時,可以采用建造者模式。1、什么是建造者模式 Separate the construction of a complex object from its representation so that the same constructi...
閱讀 2171·2023-04-25 20:45
閱讀 1084·2021-09-22 15:13
閱讀 3649·2021-09-04 16:48
閱讀 2587·2019-08-30 15:53
閱讀 936·2019-08-30 15:44
閱讀 953·2019-08-30 15:43
閱讀 1011·2019-08-29 16:33
閱讀 3439·2019-08-29 13:08