Vue.js是一個用來開發Web界面的前端庫,很是輕量級,只須要關注於data的變化,使代碼變得更加容易維護。
說人話就是,今後再也不有所謂的jQuery的html代碼拼接,讓渲染html像德芙同樣縱享絲滑,比rain還潤!php
其實先後端渲染各有各的好處html
直接下載像引用jQuery同樣引入便可
前端
我是這樣引入 的vue
<script src="./vue.js"></script>
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <script src="../vue.js"></script> <title>第一個vue程序</title> </head> <body> <div id="app"> <h1>{{cqh}}</h1> </div> <script> new Vue({ el: '#app', data: { message: 'hello world', } }) </script>
運行輸出
就是這麼簡單!java
用{{}}輸出變量便可golang
<div id="app"> <h1>{{cqh}}</h1> </div> <script> new Vue({ el: '#app', data: { cqh: 'chenqionghe' } }) </script>
這裏直接把data.cqh的信息顯示出來了
後端
放在{{}}內的文本爲表達式,除了直接輸出屬性值外,還能夠寫簡單的js表達式服務器
<div id="app"> <p>{{id+1}}</p> <p>{{id==123? 'a' : 'b'}} </p> <p>{{cqh.split('').join('--')}} </p> </div> <script> new Vue({ el: '#app', data: { cqh: 'chenqionghe', id: 123, } }) </script>
使用-:attr="expr"
形式app
<div id="app"> <h1 :id="'123'+id" :style="style" >{{cqh}}</h1> </div> <script> new Vue({ el: '#app', data: { cqh: 'chenqionghe', id: 123, color: 'red', style:{ 'color':'red' } } }) </script>
這裏:屬性
後邊是一個js表達式,能夠直接使用data的變量
ide
過濾器在vue的filters中定義,相似管道的方式使用
<div id="app"> <p>{{cqh|uppercase}}</p> </div> <script> new Vue({ el: '#app', data: { cqh: 'chenqionghe', }, filters: { uppercase: function (value) { if (!value) return ''; value = value.toString(); return value.toUpperCase() } } }) </script>
運行結果以下
過濾器本質是一個函數,還能夠傳參數,v
{{ message | filterA('arg1', arg2) }}
兩種方式,@或v-on後邊跟事件名,引號裏邊放methods裏調用的方法
<div id="app"> <button @click="a">a事件</button> <button v-on:click="b">b事件</button> </div> <script> new Vue({ el: '#app', data: { cqh: 'chenqionghe', id: 123, color: 'red', }, methods: { a() { alert(this.cqh) }, b() { alert(this.id) } } }) </script>
運行以下
爲了不在模板中加入太重的業務邏輯,好比拼接字符串,計算價格等
vue還提供了計算屬性的方法computed
<div id="app"> <p>{{fullName}}</p> </div> <script> new Vue({ el: '#app', data: { cqh: 'chenqionghe', }, computed: { fullName() { return this.cqh + "-雪山飛豬" } } }) </script>
運行以下
<div v-if="yes"> <div v-if="inner">inner</div> <div v-else>not inner</div> </div> </body> <script> new Vue({ el: '#app', data: { yes:true, inner:false, } }) </script>
輸出
<div id="app"> <ul> <li v-for="v in list"> <h3>{{v.title}}-{{v.description}}</h3> </li> </ul> <ul> <li v-for="(v,k) in list"> <h3>{{k}}-{{v.title}}-{{v.description}}</h3> </li> </ul> </div> </body> <script> new Vue({ el: '#app', data: { list: [ {title: "php", description:"腳本語言"}, {title: "java", description:"編譯語言"}, {title: "golang", description:"編譯語言"}, ], } })
輸出
v-if指定都包含在一個根元素中,若是想應用到多個兄弟節點上不想重複寫,就用template,最後渲染結果不會有它!
<div id="app"> <template v-if="yes"> <li>a</li> <li>b</li> <li>c</li> </template> </div> </body> <script> new Vue({ el: '#app', data: { yes: true, inner: false, } }) </script>
最後渲染以下
<div id="app"> <input type="text" v-model="cqh"> <span>你的名字是:{{cqh}}</span> </div> <script> new Vue({ el: '#app', data: { cqh: 'chenqionghe', } }) </script>
當咱們修改表單元素的同時,v-model中的值也是實時更新的
<div id="app"> <label><input type="radio" value="male" v-model="gender">男</label> <label><input type="radio" value="female" v-model="gender">女</label> <p>你的性別是:{{gender}}</p> </div> <script> new Vue({ el: '#app', data: { cqh: 'chenqionghe', gender:"", } }) </script>
輸出
<div id="app"> <label><input type="checkbox" value="1" v-model="list">1</label> <label><input type="checkbox" value="2" v-model="list">2</label> <label><input type="checkbox" value="3" v-model="list">3</label> <p>你的選擇是:{{list.join('|')}}</p> </div> <script> new Vue({ el: '#app', data: { cqh: 'chenqionghe', list:[], } }) </script>
輸出
<div id="app"> <select v-model="list"> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> </select> <p>你的選擇是:{{list}}</p> </div> <script> new Vue({ el: '#app', data: { cqh: 'chenqionghe', list: "", } }) </script>
輸出