• vue.js语法


    Vue.js是当下很火的一个JavaScript MVVM(Model-View-ViewModel)库,它是以数据驱动和组件化的思想构建的。相比于Angular.js,Vue.js提供了更加简洁、更易于理解的API,使得我们能够快速地上手并使用Vue.js。

    如果你之前已经习惯了用jQuery操作DOM,学习Vue.js时请先抛开手动操作DOM的思维,因为Vue.js是数据驱动的,你无需手动操作DOM。它通过一些特殊的HTML语法,将DOM和数据绑定起来。一旦你创建了绑定,DOM将和数据保持同步,每当变更了数据,DOM也会相应地更新。

    当然了,在使用Vue.js时,你也可以结合其他库一起使用,比如jQuery。

    1.使用

    使用Vue的过程就是定义MVVM(Model-View-ViewModel)各个组成部分的过程的过程。

    <!--这里定义View-->
    <
    div id="app">{{ message }}</div>
    <script src="js/vue.js"></script>
    <script>
            // 这里定义Model
            var exampleData = {
                message: 'Hello World!'
            }
    
            // 这里创建一个 Vue 实例或 "ViewModel"
            // 连接 View 与 Model
            new Vue({
                el: '#app',
                data: exampleData
            })
    </script>

    2.Vue.js的常用指令

    Vue.js提供了一些常用的内置指令,接下来我们将介绍以下几个内置指令:

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

    Vue.js具有良好的扩展性,我们也可以开发一些自定义的指令,后面的文章会介绍自定义指令。

    2.1 v-if指令

    v-if后面赋予 可以转化为布尔类型的表达式

    <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>
    
     <script src="js/vue.js"></script>
     <script>
            var vm = new Vue({
                el: '#app',
                data: {
                    yes: true,
                    no: false,
                    age: 28,
                    name: 'keepfool'
                }
            })
     </script>

    这里最后就输出

    <div id="app">
        <h1>Hello, Vue.js!</h1>
        <h1>Yes!</h1>
        <!---->
        <h1>Age: 28</h1>
        <!---->
    </div>

    2.2 v-show

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

    这里代码只是v-if改为v-show

    输出为

    <div id="app">
    <h1>Hello, Vue.js!</h1>
    <h1>Yes!</h1>
    <h1 style="display: none;">No!</h1>
    <h1>Age: 28</h1>
    <h1 style="display: none;">Name: keepfool</h1>
    </div>

    这里区别是上面v-if直接不输出html代码,这里用display:none隐藏

    2.3 v-else指令

    <h1 v-if="age >= 25">Age: {{ age }}</h1>
    <h1 v-else>Name: {{ name }}</h1>
    
    <script src="js/vue.js"></script>
        <script>
            var vm = new Vue({
                el: '#app',
                data: {
                    age: 28,
                    name: 'keepfool',
                    sex: 'Male'
                }
            })
    </script>

     前一兄弟元素必须有 v-if 或 v-else-if,新版的vue.js新增了v-else-if用法也跟v-if一样,不过前一兄弟元素必须有v-ifv-else-if,旧版的v-else前面可以跟v-show,但新版v-else前面不能是v-show了。

    2.4 v-for指令

    <div v-for="p in people">
          <h1>Age: {{ p.age }}</h1>
          <h1>Name: {{ p.name }}</h1>
          <h1>Sex: {{ p.sex }}</h1>
    </div>
    
    <script charset="utf-8" src="js/vue.js"></script>
    <script type="text/javascript">
         var myModel = {
            people:[
                {
                    age: 25,
                    name: 'keepfool',
                    sex: 'Male'
                },
                {
                    age: 26,
                    name: 'keepfool2',
                    sex: 'FeMale'
                },
                {
                    age: 27,
                    name: 'keepfool3',
                    sex: 'Male2'
                }
            ]
            
        };
    
     var vm = new Vue({
        el: '#app',
        data: myModel
    })
    </script>

    父元素用v-for,子元素可以遍历绑定的对应Array | Object | number | string

    v-for还可以这样用:

    <div v-for="(item, index) in items"></div>
    <div v-for="(val, key) in object"></div>
    <div v-for="(val, key, index) in object"></div>

    2.5 v-bind指令

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

    <div id="app">
          <ul class="pagination">
              <li v-for="n in pageCount">
                  <a href="javascripit:void(0)" v-bind:class="activeNumber === n ? 'active' : ''">{{ n }}</a>
              </li>
          </ul>
    </div>
      <script src="js/vue.js"></script>
        <script>
            var vm = new Vue({
                el: '#app',
                data: {
                    activeNumber: 1,
                    pageCount: 10
                }
            })
        </script>

    又例如:

    <img v-bind:src="'/path/to/images/' + fileName">
    <div v-bind="{ 'id': someProp, 'other-attr': otherProp }"></div>

    2.6 v-on指令

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

    2.7 v-model指令

    v-model在表单控件元素上创建双向数据绑定

    <input v-model="message" placeholder="edit me">
    <p>Message is: {{ message }}</p>
  • 相关阅读:
    B题 hdu 1407 测试你是否和LTC水平一样高
    A题 hdu 1235 统计同成绩学生人数
    hdu 1869 六度分离(最短路floyd)
    hdu 2795 Billboard(线段树+单点更新)
    hdu 1754 I Hate It(线段树)
    hdu 1166敌兵布阵(线段树)
    hdu 1556(线段树之扫描线)
    Contest2073
    中南oj String and Arrays
    51nod 1459 迷宫游戏 (最短路径—Dijkstra算法)
  • 原文地址:https://www.cnblogs.com/amiezhang/p/6898148.html
Copyright © 2020-2023  润新知