原文引自 Vue 官方教程 :https://cn.vuejs.org/v2/guide/javascript
Vue.js 是一套構建用戶界面的漸進式框架。採用的是自底向上增量開發的設計(與其餘重量級框架不一樣點)。Vue的核心庫只關注圖層,不只易於上手,還便於與第三方庫或既有項目整合。html
<script src = './vue.js'><script> <div id = 'app> <p> {{ message }} </p> </div> <script> var app = new Vue({ el: '#app', message: 'helloword!!!' }) <script>
元素屬性:經過v-bind綁定 例如v-bind:title="哈哈哈"vue
v-for (結構到數據)java
v-model 實現表單輸入和應用狀態之間的雙向綁定api
computed: { // a computed getter reversedMessage: function () { // `this` points to the vm instance return this.message.split('').reverse().join('') } }
filters: { 過濾器函數 }數組
在Vue裏,一個組件本質上是一個擁有預約義選項的一個Vue實例緩存
var vm = new Vue({ //選項 })
全部的 Vue.js 組件其實都是被擴展的 Vue 實例app
不要在實例屬性和回調函數中箭頭函數,由於箭頭函數綁定父上下文,this不會像預想的同樣是Vue實例框架
Vue.js 是否有「控制器」的概念?答案是,沒有。dom
也能夠不用模板,直接寫渲染(render)函數,使用可選的JSX語法
使用 v-once 指令,你也能執行一次性地插值,當數據改變時,插值處的內容不會更新
注意:你的站點上動態渲染的任意 HTML 可能會很是危險,由於它很容易致使 XSS 攻擊。請只對可信內容使用 HTML 插值,毫不要對用戶提供的內容插值。
對id,布爾值的屬性有效
<!-- 這是語句,不是表達式 --> {{ var a = 1 }} <!-- 流控制也不會生效,請使用三元表達式 --> {{ if (ok) { return message } }}
注意:模板表達式都被放在沙盒中,只能訪問全局變量的一個白名單,如 Math 和 Date 。你不該該在模板表達式中試圖訪問用戶定義的全局變量。
是帶有v-前綴的特殊屬性
一個指令能接受一個參數,在指令後面以冒號指明
<form v-on:submit.prevent="onSubmit"></form>
<!-- in mustaches --> {{ message | capitalize }} <!-- in v-bind --> <div v-bind:id="rawId | formatId"></div>
能夠接受參數
<!-- 完整語法 --> <a v-on:click="doSomething"></a> <!-- 縮寫 --> <a @click="doSomething"></a>
<!-- 完整語法 --> <a v-bind:href="url"></a> <!-- 縮寫 --> <a :href="url"></a>
methods:只要發生從新渲染, method調用總會調用執行該函數
缺點:命令式和重複式。更多選擇 computed 屬性
計算屬性默認只有getter,根據需求也能夠提供一個setter
也能夠綁定一個計算屬性
<div v-bind:class="[activeClass, errorClass]">
data: { activeClass: 'active', errorClass: 'text-danger' }
直接綁定到一個樣式對象
<div v-bind:style="[baseStyles, overridingStyles]">
當 v-bind:style 使用須要特定前綴的 CSS 屬性時,如 transform ,Vue.js 會自動偵測並添加相應的前綴。
<template v-if="ok"> <h1>Title</h1> <p>Paragraph 1</p> <p>Paragraph 2</p> </template>
v-else 元素必須緊跟在 v-if 或者 v-else-if 元素的後面——不然它將不會被識別。
相似於 v-else,,v-else-if 必須緊跟在 v-if 或者 v-else-if 元素以後。
還有別的好處,見官網
注意: 不支持 語法,也不支持v-else。
v-show:無論初始條件是什麼,元素始終會被渲染;更高地初始渲染開銷
v-for 具備比 v-if 更高地優先級
<li v-for="(item, index) in items">
<li v-for="value in object">
<span v-for="n in 10">{{ n }}</span>
+ <my-component v-for="item in items"></my-component>
<div v-for="item in items" :key="item.id"> <!-- 內容 --> </div>
key 並不特別與 v-for 關聯,key 還有其餘用途
當你修改數組的長度時,例如: vm.items.length = newLength
若是想要顯示一個數組的顧慮或者排序的副本,而不是實際改變或重置原始數據。=>建立返回過濾或排序數組的計算屬性
v-on:click="counter += 1"
v-on:click="greet"
v-on:click="say('hi')"
.once() 點擊事件將只會觸發一次
<input v-on:keyup.13="submit">
<input v-on:keyup.enter="submit">
Vue.config.keyCode.f1 = 112
.meta
當一個ViewModel被銷燬,全部的時間處理器都會自動被刪除,無需擔憂本身如何清理它們
注意:v-model 不關心表單控件初始化所生成的值。由於它會選擇 Vue 實例數據來做爲具體的值。
input type=「text」
textarea
label for=「hello」
label for=「hello」
option
v-bind:value=「a」
<input v-model.lazy="msg" >
<input v-model.number="age" type="number">
<input v-model.trim="msg">
在較高層面上,組件是自定義元素,Vue.js 編譯器爲它添加特殊功能。在有些狀況下,組件也能夠是原生 HTML 元素的形式,以 is 特性拓展
Vue.component('my-component', { // 選項 })
確保初始化以前註冊組件
new Vue({ // ... components: { // <my-component> 將只在父模板可用 'my-component': Child } })
<u l> ,<o l>,<t a b l e> ,<s e l e c t> 限制了能被它包裹的元素, 而一些像 <o p t i o n> 這樣的元素只能出如今某些其它元素內部。解決方案:使用特殊的 is 屬性
<table> <tr is="my-row"></tr> </table>
+ <script type="text/x-template"> + JavaScript內聯模版字符串 + .vue 組件
data: function () { return { counter: 0 } }
父子組件:組件 A 在它的模板中使用了組件 B。它們的關係能夠總結爲 props down,events up。父組件經過 props 向下傳遞數據給子組件,子組件經過 events 給父組件發送消息。
子組件使用父組件的數據,須要經過子組件的 props 選項
<!-- 傳遞了一個字符串 "1" --> <comp some-prop="1"></comp>
<!-- 傳遞實際的 number --> <comp v-bind:some-prop="1"></comp>
props: ['initialCounter'], data: function () { return { counter: this.initialCounter } }
props: ['size'], computed: { normalizedSize: function () { return this.size.trim().toLowerCase() } }
注意在 JavaScript 中對象和數組是引用類型,指向同一個內存空間,若是 prop 是一個對象或數組,在子組件內部改變它會影響父組件的狀態。
父組件是使用 props 傳遞數據給子組件,但若是子組件要把數據傳遞回去,應該怎樣作?那就是自定義事件!
v-on:click.native="doThing"
在複雜的狀況下,咱們應該考慮使用專門的狀態管理模式
爲了讓組件能夠組合,咱們須要一種方式來混合父組件的內容和子組件本身的模板,這個過程叫作內容分發,使用
keep-alive
Slots 容許外部環境將額外的內容組合在組件中。
-這在有不少模版或者小的應用中有用,不然應該避免使用,由於它將模版和組件的其餘定義隔離了。