vue.js 是当下很火的一个js mvvm 库,它是以数据驱动和组件化的思想构建的,相比于angular,vue提供了更加简洁,更易于理解的api,是的我们能够够快速的上手并使用vue
首先,抛开手动操作dom的思维,因为vue是数据驱动的,你无须手动操作dom,他通过一些特殊的html语法,将dom和数据绑定起来了。一旦你创建了绑定,dom将和数据保持同步,每当数据变更,dom也会相应的变更。
MVVM 模式
双向绑定viewmodel 中的dom listenner 会帮我们检测页面上dom元素的变化,日过有变化,则更改model中的数据
当我们更新model中的数据时,data bindings 工具会帮我们更新页面中的dom元素
HELLO WORLD示例
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> </head> <body> <!--这是我们的View--> <div id="app"> {{ message }} </div> </body> <script src="js/vue.js"></script> <script> // 这是我们的Model var exampleData = { message: 'Hello World!' } // 创建一个 Vue 实例或 "ViewModel" // 它连接 View 与 Model new Vue({ el: '#app', data: exampleData }) </script> </html>
使用vue的过程就是定义mvvm各个组成部分的过程
1.定义 view
2.定义 model
3. 创建一个vue实例(ViewModel),它用于连接View和Model
在创建vue实例时,需要传入一个选项对象,选项对象可以包含数据,挂载元素,方法,模声明周期钩子等等
挂载 到 #app
data属性指向Model
双向绑定
<!--这是我们的View--> <div id="app"> <p>{{ message }}</p> <input type="text" v-model="message"/> </div>
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> </head> <body> <div id="app"> <h1>Hello, Vue.js!</h1> <h1 v-if="yes">Yes!</h1> <h1 v-if="no">No!</h1> <h1 v-if="age >= 25">Age: {{ age }}</h1> <h1 v-if="name.indexOf('jack') >= 0">Name: {{ name }}</h1> </div> </body> <script src="js/vue.js"></script> <script> var vm = new Vue({ el: '#app', data: { yes: true, no: false, age: 28, name: 'keepfool' } }) </script> </html>
v-show 的区别是 加上了 display:none
可以用v-else 指令为 v-if 或 v-show 添加一个 else块。
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> </head> <body> <div id="app"> <h1 v-if="age >= 25">Age: {{ age }}</h1> <h1 v-else>Name: {{ name }}</h1> <h1>---------------------分割线---------------------</h1> <h1 v-show="name.indexOf('keep') >= 0">Name: {{ name }}</h1> <h1 v-else>Sex: {{ sex }}</h1> </div> </body> <script src="js/vue.js"></script> <script> var vm = new Vue({ el: '#app', data: { age: 28, name: 'keepfool', sex: 'Male' } }) </script> </html>
for 语句
<tbody> <tr v-for="person in people"> <td>{{ person.name }}</td> <td>{{ person.age }}</td> <td>{{ person.sex }}</td> </tr> </tbody>
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> </head> <body> <div id="app"> <p><input type="text" v-model="message"></p> <p> <!--click事件直接绑定一个方法--> <button v-on:click="greet">Greet</button> </p> <p> <!--click事件使用内联语句--> <button v-on:click="say('Hi')">Hi</button> </p> </div> </body> <script src="js/vue.js"></script> <script> var vm = new Vue({ el: '#app', data: { message: 'Hello, Vue.js!' }, // 在 `methods` 对象中定义方法 methods: { greet: function() { // // 方法内 `this` 指向 vm alert(this.message) }, say: function(msg) { alert(msg) } } }) </script> </html>