目錄javascript
github:https://github.com/vuejs/vuehtml
學習網站:https://www.runoob.com/vue2/vue-tutorial.html前端
官方文檔:http://vuejs.org/v2/guide/syntax.htmlvue
中文文檔: https://cn.vuejs.org/v2/guide/syntax.htmljava
Webpack 是一個前端資源加載/打包工具。它將根據模塊的依賴關係進行靜態分析,而後將這些模塊按照指定的規則生成對應的靜態資源。python
Webpack 入門教程:http://www.runoob.com/w3cnote/webpack-tutorial.htmlreact
在body和html之間webpack
</body> <script src="vuejs/vue.js"></script> </html>
對於製做原型或學習,你能夠這樣使用最新版本:css3
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
對於生產環境,咱們推薦連接到一個明確的版本號和構建文件,以免新版本形成的不可預期的破壞:
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.0"></script>
在用 Vue 構建大型應用時推薦使用 NPM 安裝[1]。NPM 能很好地和諸如 webpack 或 Browserify 模塊打包器配合使用。同時 Vue 也提供配套工具來開發單文件組件。
npm install vue
npm install -g @vue/cli vue create my-project
經過對框架的瞭解與運用程度,來決定其在整個項目中的應用範圍,最終能夠獨立以框架方式完成整個web前端項目
能夠獨立完成先後端分離式web項目的JavaScript框架 vue框架:漸進式JavaScript框架 vue一個環境:能夠只控制頁面中一個標籤、能夠控制一組標籤、能夠控制整個頁面、能夠控制整個項目 vue能夠根據實際需求,選擇控制前端項目的區域範圍
""" 一、html、css、js直接開發項目,項目雜亂,不方便管理,要纔有前端框架進行開發,規範項目 二、Angular、React、Vue三個前端框架,吸收前兩個框架的全部優勢,摒棄缺點,一手文檔是中文 三、Vue框架優勢: 輕量級 數據驅動 數據的雙向綁定 虛擬DOM(嵌套頁面架構的緩存) 組件化開發 由全球社區維護 單頁面應用、MVVM設計模式 """ 總結: 三大主流框架之一:Angular React Vue 先進的前端設計模式:MVM 能夠徹底脫離服務器端,之前端代碼複用的方式渲染整個頁面:組件化開發
1.性能
若是一個網站在性能方面存在問題,它將會損失超過一半以上的用戶。
對於框架性能,你能夠在網上查詢到各種測試,你能夠了解框架的代碼結構、邏輯處理,判斷是否可以知足你對性能的需求。
2.擴展性
對於一個須要長期維護的項目而言,常常會有各類各樣的功能添加進來,這時擴展性就顯得尤其重要,若是你在前期選擇了一款知足前期的框架,但後期你須要使用某個插件來完成某個功能,或者基於什麼完成一個功能,這時候你發現網上並無檢索到相關內容,心裏是否充滿了心塞。
3.維護性
一個項目的生命週期不是三天兩天,而前端的發展則是爆炸式的。在你選擇框架的時候是否考慮過官方在後續的一段時間是否會一直對框架進行更新維護?若是不肯定,是否已經有了官方放棄維護後的解決方案?
4.兼容性
這裏的兼容性指的不是瀏覽器兼容,而是框架與其餘框架及工具的兼容,使用這個框架對於你的開發環境是否有影響,對於你的開發 IDE 是否有影響。
Vue.js 適用具備如下性質的項目:
總的來講,若是你是一個 MVVM 框架新手,那麼 Vue.js 就是你最好的進階工具,若是你是一個已經掌握了其餘 MVVM 框架的老手,那你會發現 Vue.js 更加簡單輕便。
多頁面跳轉刷新全部資源,每一個公共資源(js、css等)需選擇性從新加載,經常使用於 app 或 客戶端等
只有一張Web頁面的應用,是一種從Web服務器加載的富客戶端,單頁面跳轉僅刷新局部資源 ,公共資源(js、css等)僅需加載一次,經常使用於PC端官網、購物等網站
單頁面應用 | 多頁面應用 | |
---|---|---|
組成 | 一個外殼頁面和多個頁面片斷組成 | 多個完整頁面構成 |
資源公用(css,js) | 共用,只需在外殼部分加載 | 不共用,每一個頁面都須要加載 |
刷新方式 | 頁面局部刷新或更改 | 整頁刷新 |
url 模式 | a.com/#/pagetwo a.com/#/pagetwo | a.com/pageone.html a.com/pagetwo.html |
用戶體驗 | 頁面片斷間的切換快,用戶體驗良好 | 頁面切換加載緩慢,流暢度不夠,用戶體驗比較差 |
轉場動畫 | 容易實現 | 沒法實現 |
數據傳遞 | 容易 | 依賴 url傳參、或者cookie 、localStorage等 |
搜索引擎優化(SEO) | 須要單獨方案、實現較爲困難、適用於追求高度支持搜索引擎的應用 | 實現方法簡易 |
試用範圍 | 高要求的體驗度、追求界面流暢的應用 | 適用於追求高度支持搜索引擎的應用 |
開發成本 | 較高,常需藉助專業的框架 | 較低 ,但頁面重複代碼多 |
維護成本 | 相對容易 | 相對複雜 |
<div class="" id="app">{{ }}</div>
<script> // console.log(Vue); new Vue({ el: "#app", }) </script>
<div id="app"> <p>{{ msg }}</p> <p>{{ info }}</p> </div>
<script src="vuejs/vue.js"></script> <script> new Vue({ el: '#app', data: { msg: "message", info: "vue變量信息" } }); </script>
<div id="app"> <p>{{ msg }}</p> <p>{{ info }}</p> </div>
let app=new Vue({ el: '#app', data: { msg: "message", info: "vue變量信息" } }); console.log(app.info); console.log(main.info)
訪問實例成員,用 vue實例.$成員名, eg:app.$el
console.log(app.$el); console.log(app.$data); console.log(app.$data.info); console.log(app.info);
<div id="app"> <p class="p1" v-on:click="fn">這是一個段落,被點擊了{{ count }}下</p> </div> </body> <script src="vuejs/vue.js"></script> <script> let app = new Vue({ el: '#app', data: { count: 0, fn: function () { console.log(app.count); app.count ++ ; console.log(this)//this不是該vue實例對象,是頂級Window對象,並非指當前對象 } } }) </script>
就是爲vue實例提供事件函數的
<script> let app = new Vue({ el: '#app', data: { count: 0, }, methods:{ fn:function () { this.count ++// this表明當前該vue實例對象 } } }, ); </script>
<div id="app"> <p class="p2" v-on:mouseover="overAction" v-on:mouseout="outAction" >該便籤被{{ action }}</p> <div v-on:mouseover="overAction" v-on:mouseout="outAction">div被{{ action }}</div> </div>
let app = new Vue({ el: '#app', action: '渲染', data: { count: 0, }, methods: { fn: function () { this.count++// this表明當前該vue實例對象 }, overAction: function () { this.action = '懸浮' }, outAction: function () { this.action = '離開' } } });
js中沒有字典,只要對象類型,能夠把對象當作字典來使用
key本質是屬性名,因此都是字符串類型(能夠出現1,true),其實都是省略引號的字符串
<script> let sex='男'; let hobby='籃球'; let dic={ 'name':'Ocean', 1:100, true:12345, age:18, sex:sex, hobby,//相同的時候是能夠省略一個的 }; console.log(dic['name']); console.log(dic['1']); console.log(dic[1]); console.log(dic['age']); console.log(dic['hobby']); console.log(dic['sex']); console.log(dic.sex); </script>
dic.price=3.5; console.log(dic.price); console.log(dic['proce']);//不能這樣調用
聲明類建立對象,類能夠實例化n個對象,哪一個對象調用,this就表明誰 <script> function People(name,age) { this.name=name; this.age=age; this.eat=function () { console.log(this.name+'正在開炮'); return 123 } } let p1 = new People('ocean',18); console.log(p1.name); let res=p1.eat(); console.log(res); </script>
直接聲明對象,{}內的key都屬於當前對象的
{}中的方法一般會簡寫
let stu1={ name:'張三', age:18, // eat: function () { // console.log(this.name + '在吃飯'); eat(){ console.log(this.name+"打炮中") } }; stu1.eat()
總結
1.{}中直接寫一個變量:key與value是同名,value有該名變量提供值
2.es5下,全部的函數均可以做爲類,類能夠new聲明對象,在函數中用 this.資源 爲聲明的對象提供資源
3.{}中出現的函數叫方法,方法能夠簡寫 { fn: function(){} } => { fn(){} }
一、插值表達式,能完成變量渲染,變量基礎運算,變量方法調用,不能完成複雜運算(一步解決不了的,不能出現;)
<div id="app"> <p>{{ msg }}</p> <p>{{ msg + '拼接內容' }}</p>//字符串拼接 <p>{{ msg[1] }}</p>//字符串索引取值 <p>{{ msg.slice(2,4) }}</p>//字符串切片 <hr> </div> </body> <script src="vuejs/vue.js"></script> <script> new Vue({ el:"#app", data:{ msg:'文本信息' } }) </script>
二、v-text:將全部內容作文本渲染
<p v-text="msg + '拼接內容'"></p>
三、v-html:能夠解析html語法標籤的文本,字符串拼接的時候出現字符串的時候方便使用
<p v-text="'<b>' + msg + '</b>'"></p> <p v-html="'<b>' + msg + '</b>'"></p> <p v-text="`<b>${msg}</b>`"></p> <p v-html="`<b>${msg}</b>`"></p>
在傳值的時候是各不干擾,個傳個的
<div id="app"> <!-- 默認將msg做爲參數傳給filterFn --> <p>{{ msg | filterFn }}</p> </div> </body> <script src="vuejs/vue.js"></script> <script> new Vue({ el:"#app", data:{ msg:"文本內容", num:1 }, filters:{ filterFn(v1){ console.log(v1); return `<b>${v1}</b>`; }, } })
<p>{{ num | f1 | f2 }}</p>//能夠多層過濾
new Vue({ el: '#app', data: { msg: '文本內容', num: 1 }, filters: { f1(v1) { return v1 * 100; }, f2(v1) { return v1 * 100; } } })
<p>{{ msg, num | f3(666, '好的') }}</p> filters: { f3(v1, v2, v3, v4) { console.log(v1); console.log(v2); console.log(v3); console.log(v4); } }
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8"> <title>事件指令</title> <style> .box { width: 200px; height: 200px; background-color: yellowgreen; } </style> </head> <body> <div id="app"> <!--事件指令:v-on:事件名="事件函數" --> <!--簡寫:@事件名="事件函數" --> <p v-on:click="f1">被點擊了{{ count }}下</p> <hr> <p @click="f2">{{ p2 }}</p> <hr> <!--綁定的事件函數能夠添加(),添加括號就表明要傳遞參數--> <ul> <li @click="f3(100)">{{ arr[0] }}</li> <li @click="f3(200)">{{ arr[1] }}</li> <li @click="f3(300)">{{ arr[2] }}</li> </ul> <ul> <li @click="f4(0)">{{ arr[0] }}</li> <li @click="f4(1)">{{ arr[1] }}</li> <li @click="f4(2)">{{ arr[2] }}</li> </ul> <hr> <!--綁定的事件函數若是沒有傳遞參數,默認傳入 事件對象 --> <div class="box" @click="f5"></div> <hr> <!--事件函數一旦添加傳參(),系統就再也不傳遞任何參數,須要事件對象時,能夠手動傳入 $event --> <div class="box" @click="f6(10, $event)"></div> </div> </body> <script src="js/vue.js"></script> <script> new Vue({ el: '#app', data: { count: 0, p2: '第二個p', arr: [1, 2, 3], }, methods: { f1() { this.count ++ }, f2() { console.log(this.p2) }, f3(num) { console.log(num); }, f4(index) { console.log(this.arr[index]); }, f5(ev, b) { console.log(ev); console.log(b); }, f6(num, ev) { console.log(num); console.log(ev); } }, }) </script> </html>
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8"> <title>屬性指令</title> <style> .b1 { width: 100px; height: 100px; background-color: red; } .box1 { width: 150px; height: 150px; background-color: darkturquoise; transition: .3s; } .box2 { width: 300px; height: 100px; background-color: darkgoldenrod; transition: .3s; } .circle { border-radius: 50%; } </style> </head> <body> <div id="app"> <!--1.下方的class、id、title、abc等是div標籤的屬性,屬性指令就是控制它們的--> <div class="b1" id="b1" v-bind:title="title" :abc="xyz"></div> <!--2.屬性指令:v-bind:屬性名="變量",簡寫方式 :屬性名="變量" --> <!--3.屬性指令操做 style 屬性--> <div style="width: 200px;height: 200px;background-color: greenyellow"></div> <!-- 一般:變量值爲字典 --> <div :style="mys1"></div> <!-- 瞭解:{中能夠用多個變量控制多個屬性細節} --> <div :style="{width: w,height: '200px',backgroundColor: 'deeppink'}"></div> <!--重點:通常vue都是結合原生css來完成樣式控制 --> <!--<div :class="c1"></div>--> <!--class能夠寫兩份,一份寫死,一份有vue控制--> <div class="box1" :class="c2"></div> <!--{}控制類名,key爲類名,key對應的值爲bool類型,決定該類名是否起做用--> <div :class="{box2:true, circle:cable}" @mouseover="changeCable(1)" @mouseout="changeCable(0)"></div> <!--[]控制多個類名--> <div :class="[c3, c4]"></div> </div> <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br> </body> <script src="js/vue.js"></script> <script> let app = new Vue({ el: '#app', data: { title: '12345', xyz: 'opq', mys1: { width: '200px', height: '200px', // 'background-color': 'greenyellow' backgroundColor: 'pink', }, w: '200px', c1: 'box1', c2: 'circle', cable: false, c3: 'box1', c4: 'circle' }, methods: { changeCable(n) { this.cable = n; } } }); setInterval(function () { // app.c1 = app.c1 === 'box1' ? 'box2' : 'box1'; if (app.c1 === 'box1') { app.c1 = 'box2'; } else { app.c1 = 'box1'; } }, 300) </script> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <div id="box"> <div :style="box"></div> <hr> <button @click="b1">按鈕1</button> <button @click="b2">按鈕2</button> <button @click="b3">按鈕3</button> </div> </body> <script src="vuejs/vue.js"></script> <script> let app = new Vue({ el: "#box", data: { box: { width: "200px", height: "200px", backgroundColor: "red" } }, methods: { b1(v1, v2) { app.box = { width: "200px", height: "200px", backgroundColor: "black" } }, b2(v1, v2) { app.box = { width: "200px", height: "200px", backgroundColor: "yellow" } }, b3(v1, v2) { app.box = { width: "200px", height: "200px", backgroundColor: "blue" } } } }) </script> </html>
有一個200x200矩形框wrap,點擊wrap自己,記錄點擊次數,若是是1次wrap爲pink色,2次wrap爲green色,3次wrap爲cyan色,4次從新回到pink色,依次類推
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <div id="app" :style="dic1" @click="fn">{{ count }}</div> </body> <script src="vuejs/vue.js"></script> <script> let app = new Vue({ el: "#app", data: { count: 0, dic1: { width: "200px", height: "200px", backgroundColor: "red" }, arr: ['red', 'green', 'cyan'] }, methods: { fn() { app.count++; let n = this.count % 3; this.dic1.backgroundColor = this.arr[n] } } }) </script> </html>
如圖:圖形初始左紅右綠,點擊一下後變成上紅下綠,再點擊變成右紅左綠,再點擊變成下紅上綠,依次類推
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> .box { width: 200px; height: 200px; border: 1px #0f0f0f solid; border-radius: 50%; overflow: hidden; position: relative; } .b1 { background-color: red; position: absolute; } .b2 { background-color: green; position: absolute; } .left { width: 100px; height: 200px; float: left; left: 0; } .right { width: 100px; height: 200px; float: left; right: 0; } .top { width: 200px; height: 100px; top: 0; } .bottom { width: 200px; height: 100px; bottom: 0; } </style> </head> <body> <div id="app"> <div class="box" @click="clickAction"> <div class="b1 " :class="c1"></div> <div class="b2" :class="c2"></div> </div> </div> </body> <script src="vuejs/vue.min.js"></script> <script> let app=new Vue({ el:'#app', data:{ count:1, c1:'left', c2:'right', c1Arr:['left','top','right','bottom'], c2Arr: ['right','bottom','left','top'] }, methods:{ clickAction(){ let n = this.count ++; this.c1 = this.c1Arr[n % 4]; this.c2 = this.c2Arr[n % 4] } } }) </script> </html>
能夠將圖編程自動旋轉
基於第三題的編輯
利用時鐘定時器進行編輯
方法1
setInterval(function () { let n = app.count++; app.c1 = app.c1Arr[n % 4]; app.c2 = app.c2Arr[n % 4] }, 500)
方法2
setInterval(function () { app.clickAction(); },500)
一、在html頁面中用script標籤導入vue環境 <script src="js/vue.js"></script>
二、new Vue({ el: "#app" })掛載頁面標籤,創建關聯後控制頁面標籤 掛載點纔有css3選擇器語法 掛載點就是vue與頁面的關聯 掛載點只檢索第一個匹配結果
三、插值表達式{{ }}能夠完成基礎運算 num | num + 10 | str.split() + "拼接"
四、插值表達式中的變量有實例成員 data 來提供 <p id="app">{{ msg }}</P> let msg = '12345' new Vue({ el: "#app", data: { msg, } })
五、v-on指令能夠給標籤綁定事件,事件函數由實例成員 methods 來提供
六、插值表達式{{ 變量 | 過濾器 }}的過濾器由實例成員 filters 來提供 <p id="app" @click="fn">{{ msg | f1(1), 10 | f2(100, 200) }}</P> let msg = '12345' new Vue({ el: "#app", data: { msg, }, methods: { fn(){} }, filters: { f1(v1,v2){return v1+v2}, f2(v1,v2,v3,v4){return v1+v2+v3+v4} } })
七、面向對象js: { 變量, } | function Fn(值){ this.屬性 = 值 } | obj = { 方法(){} } function Fn(v1, v2){ this.n1 = v1; this.n2 = v2; } let f1 = new Fn(10, 20); f1.n1
八、文本指令:{{ }} | v-text="" | v-html=""
九、事件指令: v-on:事件名="" | @事件名="" | :事件名="fn" | :事件名="fn($event, 自定義參數)" @click="fn" | @click="fn()" | @click="fn(10, 20)" | @click="fn($event, 10)"
十、屬性指令:v-bind:屬性名="" | :title="變量" | :style="字段變量" | :class="變量" | :class="[變量1, 變量2]" | :class="{類1:真假, 類2:真假}" :title="var1" | :style="dic1" | :class="var2" | :class="[var3, var4]" | :class="{box: true|false}" var2 = 'box' | var2 = 'box circle'
參考