zoukankan      html  css  js  c++  java
  • Vue.js

    感谢:

    http://www.cnblogs.com/zjf-1992/p/7841156.html

    http://www.cnblogs.com/chenhuichao/p/8308960.html

    一、概念

    Vue.js是一套构建用户界面的渐进式框架。Vue 的核心库只关注视图层

    1. 在开发中,html、css、js共同组成一个Vue的组件
    2. 相同组件的多次复用,不同组件被组合成一个更大的Vue实例;
    3. 上一级Vue实例不直接对下级Vue实例进行修改,而是通过接口;
    4. 组件的三级:中间可以根据不同端来调用不同的组件。 * 整个网站 * 单个页面 * 页面的某个模块(如登录)
    5. 因此Vue.js先天具有封装、继承的特性,这是面向对象编程的重要特点。

    Vue.js在设计上采用MVVM模式,当View视图层发生变化时,会自动更新到ViewModel.反之亦然,View与ViewModel之间通过数据双向绑定(data-binding)建立联系,如下图所示

     

    Vue.js通过MVVM模式将视图与数据分成两部分(或者说视图代码与业务逻辑的解耦),因此我们只需关心数据的操作,DOM的视图的更新等一系列事情,Vue会帮我们自动搞定。

    二、常用API

    • v-if指令
    • v-show指令
    • v-else指令
    • v-for指令
    • v-bind指令
    • v-on指令

    v-if指令

    v-if是条件渲染指令,它根据表达式的真假来删除和插入元素,它的基本语法如下:

    v-if="expression" --expression是一个返回bool值的表达式,表达式可以是一个bool属性,也可以是一个返回bool的运算式。
    <!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指令

    v-show也是条件渲染指令,和v-if指令不同的是,使用v-show指令的元素始终会被渲染到HTML,它只是简单地为元素设置CSS的style属性。

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="UTF-8">
            <title></title>
        </head>
        <body>
            <div id="app">
                <h1>Hello, Vue.js!</h1>
                <h1 v-show="yes">Yes!</h1>
                <h1 v-show="no">No!</h1>
                <h1 v-show="age >= 25">Age: {{ age }}</h1>
                <h1 v-show="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-else指令

    可以用v-else指令为v-ifv-show添加一个“else块”。v-else元素必须立即跟在v-ifv-show元素的后面——否则它不能被识别。

    <!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>

    v-else元素是否渲染在HTML中,取决于前面使用的是v-if还是v-show指令。
    这段代码中v-if为true,后面的v-else不会渲染到HTMLv-show为tue,但是后面的v-else仍然渲染到HTML了。

    v-for指令

    v-for指令基于一个数组渲染一个列表,它和JavaScript的遍历语法相似:

    v-for="item in items"

    items是一个数组,item是当前被遍历的数组元素

    <!DOCTYPE html>
    <html>
    
        <head>
            <meta charset="UTF-8">
            <title></title>
            <link rel="stylesheet" href="styles/demo.css" />
        </head>
    
        <body>
            <div id="app">
                <table>
                    <thead>
                        <tr>
                            <th>Name</th>
                            <th>Age</th>
                            <th>Sex</th>
                        </tr>
                    </thead>
                    <tbody>
                        <tr v-for="person in people">
                            <td>{{ person.name  }}</td>
                            <td>{{ person.age  }}</td>
                            <td>{{ person.sex  }}</td>
                        </tr>
                    </tbody>
                </table>
            </div>
        </body>
        <script src="js/vue.js"></script>
        <script>
            var vm = new Vue({
                el: '#app',
                data: {
                    people: [{
                        name: 'Jack',
                        age: 30,
                        sex: 'Male'
                    }, {
                        name: 'Bill',
                        age: 26,
                        sex: 'Male'
                    }, {
                        name: 'Tracy',
                        age: 22,
                        sex: 'Female'
                    }, {
                        name: 'Chris',
                        age: 36,
                        sex: 'Male'
                    }]
                }
            })
        </script>
    
    </html>

    v-bind指令

    v-bind指令可以在其名称后面带一个参数,中间放一个冒号隔开,这个参数通常是HTML元素的特性(attribute),例如:v-bind:class

    v-bind:argument="expression"

    下面这段代码构建了一个简单的分页条,v-bind指令作用于元素的class特性上。
    这个指令包含一个表达式,表达式的含义是:高亮当前页。

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="UTF-8">
            <title></title>
            <link rel="stylesheet" href="styles/demo.css" />
        </head>
        <body>
            <div id="app">
                <ul class="pagination">
                    <li v-for="n in pageCount">
                        <a href="javascripit:void(0)" v-bind:class="activeNumber === n + 1 ? 'active' : ''">{{ n + 1 }}</a>
                    </li>
                </ul>
            </div>
        </body>
        <script src="js/vue.js"></script>
        <script>
            var vm = new Vue({
                el: '#app',
                data: {
                    activeNumber: 1,
                    pageCount: 10
                }
            })
        </script>
    </html>

    v-on指令

    v-on指令用于给监听DOM事件,它的用语法和v-bind是类似的,例如监听<a>元素的点击事件:

    <a v-on:click="doSomething">

    有两种形式调用方法:绑定一个方法(让事件指向方法的引用),或者使用内联语句。
    Greet按钮将它的单击事件直接绑定到greet()方法,而Hi按钮则是调用say()方法。

    <!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>

    v-bind和v-on的缩写

    Vue.js为最常用的两个指令v-bindv-on提供了缩写方式。v-bind指令可以缩写为一个冒号,v-on指令可以缩写为@符号

    <!--完整语法-->
    <a href="javascripit:void(0)" v-bind:class="activeNumber === n + 1 ? 'active' : ''">{{ n + 1 }}</a>
    <!--缩写语法-->
    <a href="javascripit:void(0)" :class="activeNumber=== n + 1 ? 'active' : ''">{{ n + 1 }}</a>
    
    <!--完整语法-->
    <button v-on:click="greet">Greet</button>
    <!--缩写语法-->
    <button @click="greet">Greet</button>

    综合示例

    现在我们已经介绍了一些Vue.js的基础知识了,结合以上知识我们可以来做个小Demo。

    <!DOCTYPE html>
    <html>
    
        <head>
            <meta charset="UTF-8">
            <title></title>
            <link rel="stylesheet" href="styles/demo.css" />
        </head>
    
        <body>
            <div id="app">
    
                <fieldset>
                    <legend>
                        Create New Person
                    </legend>
                    <div class="form-group">
                        <label>Name:</label>
                        <input type="text" v-model="newPerson.name"/>
                    </div>
                    <div class="form-group">
                        <label>Age:</label>
                        <input type="text" v-model="newPerson.age"/>
                    </div>
                    <div class="form-group">
                        <label>Sex:</label>
                        <select v-model="newPerson.sex">
                        <option value="Male">Male</option>
                        <option value="Female">Female</option>
                    </select>
                    </div>
                    <div class="form-group">
                        <label></label>
                        <button @click="createPerson">Create</button>
                    </div>
            </fieldset>
            <table>
                <thead>
                    <tr>
                        <th>Name</th>
                        <th>Age</th>
                        <th>Sex</th>
                        <th>Delete</th>
                    </tr>
                </thead>
                <tbody>
                    <tr v-for="person in people">
                        <td>{{ person.name }}</td>
                        <td>{{ person.age }}</td>
                        <td>{{ person.sex }}</td>
                        <td :class="'text-center'"><button @click="deletePerson($index)">Delete</button></td>
                    </tr>
                </tbody>
            </table>
            </div>
        </body>
        <script src="js/vue.js"></script>
        <script>
            var vm = new Vue({
                el: '#app',
                data: {
                    newPerson: {
                        name: '',
                        age: 0,
                        sex: 'Male'
                    },
                    people: [{
                        name: 'Jack',
                        age: 30,
                        sex: 'Male'
                    }, {
                        name: 'Bill',
                        age: 26,
                        sex: 'Male'
                    }, {
                        name: 'Tracy',
                        age: 22,
                        sex: 'Female'
                    }, {
                        name: 'Chris',
                        age: 36,
                        sex: 'Male'
                    }]
                },
                methods:{
                    createPerson: function(){
                        this.people.push(this.newPerson);
                        // 添加完newPerson对象后,重置newPerson对象
                        this.newPerson = {name: '', age: 0, sex: 'Male'}
                    },
                    deletePerson: function(index){
                        // 删一个数组元素
                        this.people.splice(index,1);
                    }
                }
            })
        </script>
    
    </html>
  • 相关阅读:
    Mvc 简单分页代码
    算法
    atx
    Java8函数式编程(A)
    axios
    props
    vue 的keep alive使用注意项
    android帮助
    testng监听器方法执行顺序
    常用正则表达式
  • 原文地址:https://www.cnblogs.com/amunamuna/p/7611113.html
Copyright © 2011-2022 走看看