起步
var vm = new Vue({ // 选项 }) #每个Vue应用都需要通过实例化Vue来实现,语法格式继承原生js
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="https://cdn.staticfile.org/vue/2.4.2/vue.min.js"></script> </head> <body> <div id="app"> <h1>site: {{ site }}</h1> <h1>url: {{ url }}</h1> <h1>{{ details() }}</h1> </div> <script> var vm = new Vue({ el: '#app', data: { site: "jabbok blog", url: "www.jabbok.com", }, methods: { details:function () { return this.site + "- for ops & dev!"; } } }) </script> </body> </html> #el:就是DOM元素中的id,在这个例子中,vue的全部改动都会在这个id为app的div中产生影响。 #data:定义属性,将DOM中{{}}中的元素进行渲染替换 #methods:定义函数,这里是details(),可以通过return返回函数值,这里返回一个拼接字符串
模板语法-插值
文本
<div id="app"> <p>{{ message }}</p> </div> #最常见的数据绑定就是使用{{}}的文本插值
html
<div id="app"> <div v-html="message"></div> </div> <script> var vm = new Vue({ el: '#app', data: { message: "<h1>jabbok cnblog</h1>", }, }) </script> #在html标签中使用v-html属性,将vue中的data以html代码输出
模板语法-指令
指令是带有v-前缀的特殊属性,用于在表达式改变时,将某些行为应用到DOM上。
v-if
<div id="app"> <p v-if='seen'>this is v-if:seen</p> <p v-else>this is v-else:notseen</p> </div> <script> var vm = new Vue({ el: '#app', data: { seen: true, } }) </script> #v-if决定一个DOM是否被销毁,通过true和false来决定 #如果id中有velse,当v-if为fasle,则显示v-else中的内容 #vm.seen被重置后,DOM元素随即改变
v-model
在表单空间元素上创建双向数据绑定。
<div id="app"> <input v-model='message'> <p>{{message}}</p> </div> <script> var vm = new Vue({ el: '#app', data: { message:'Hello Vue.js!' }, methods:{ ReverseFunc() { this.message = this.message.split(' ').reverse().join(' ') } } } ) </script> #这是一个双向绑定,视图上(input)的值改变,会同步改变vue里的值,然后又反应到<p>中的值
v-bind
v-bind里引入新的概念-参数。和指令用冒号分开
<div id="app"> <p v-bind:title='title'>one line</p> <a v-bind:href='url'>baidu</a> </div> <script> var vm = new Vue({ el: '#app', data: { title: "this is a v-bind", url: 'http://baidu.com', } }) </script> #参数title、url被绑定,当vue中的data被改变,就会马上响应到DOM
v-for
<div id="app"> <ol> <li v-for="name in names">{{ name.value }}</li> </ol> </div> <script> var vm = new Vue({ el: '#app', data: { names:[ {value: 'jab'}, {value: 'eric'}, {value: 'lee'} ] } }) </script> #names的每个name是一个键值对,在DOM中把每个name.value输出
v-on
添加事件监听器,响应事件
<div id="app"> <p>{{ message }}</p> <button v-on:click='ReverseFunc'>submit</button> </div> <script> var vm = new Vue({ el: '#app', data: { message:'Hello Vue.js!' }, methods:{ ReverseFunc:function(){ this.message = this.message.split(' ').reverse().join(' ') } } } ) </script> #点击之后,触发ReverseFunc方法,将vm.message处理之后马上响应到DOM
模板语法-实时监听
<div id="app"> <p>{{message}}</p> <p>{{ReverseFunc}}</p> <p>{{ReverseFunc2()}}</p> </div> <script> var vm = new Vue({ el: '#app', data: { message:'Hello Vue.js!' }, computed:{ ReverseFunc() { return this.message.split(' ').reverse().join(' ') } }, methods:{ ReverseFunc2(){ return this.message.split(' ').reverse().join(' ') } } } ) </script> #ReverseFunc是计算属性 #ReverseFunc2是使用方法 #两种效果一样,但计算属性是依赖缓存,方法是每次重新调用 #所以计算属性性能好一点
<div id="app"> <input v-model='message'> <p>{{ReverseFunc}}</p> </div> <script> var vm = new Vue({ el: '#app', data: { message:'Hello Vue.js!', ReverseFunc:'' }, watch:{ message(){ this.ReverseFunc = this.message.split(' ').reverse().join(' ') } } } ) </script> #在watch里以监听属性为名的函数,然后再函数体做具体运算 #watch用于更大开销的操作