zoukankan      html  css  js  c++  java
  • Vue.js入门(1)常用命令

    序言

    很多人不成功的原因主要是太尊重自己了

    常用命令

    基本的Vue代码结构

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title></title>
        <script src="vue.js"></script>
    </head>
    <body>
        <!-- 将来 new 的Vue实例,会控制这个 元素中的所有内容 -->
        <!-- Vue 实例所控制的这个元素区域,就是我们的 V  -->
        <div id="app">
            <p>{{ msg }}</p>
        </div>
    
        <script>
            // 2. 创建一个Vue的实例
            // 当我们导入包之后,在浏览器的内存中,就多了一个 Vue 构造函数
            //  注意:我们 new 出来的这个 vm 对象,就是我们 MVVM中的 VM调度者
            var vm = new Vue({
                el: '#app',  // 表示,当前我们 new 的这个 Vue 实例,要控制页面上的哪个区域
                // 这里的 data 就是 MVVM中的 M,专门用来保存 每个页面的数据的
                data: { // data 属性中,存放的是 el 中要用到的数据
                    msg: '欢迎学习Vue' // 通过 Vue 提供的指令,很方便的就能把数据渲染到页面上,程序员不再手动操作DOM元素了【前端的Vue之类的框架,不提倡我们去手动操作DOM元素了】
                }
            })
        </script>
    </body>
    </html>
    View Code

    v-cloak:插值表达式

    <!-- 使用 v-cloak 能够解决 插值表达式闪烁的问题 -->
    <p v-cloak>++++++++ {{ msg }} ----------</p>
    View Code

    v-text:

    <h4 v-text="msg">==================</h4>
    <!-- 默认 v-text 是没有闪烁问题的 -->
    <!-- v-text会覆盖元素中原本的内容,但是 插值表达式  只会替换自己的这个占位符,不会把 整个元素的内容清空 -->
    View Code

    v-html:渲染输出html

    <div v-html="msg2">1212112</div>
    View Code

    v-bind:Vue提供的属性绑定机制 缩写是 :

     <!-- v-bind: 是 Vue中,提供的用于绑定属性的指令 -->
    <!-- <input type="button" value="按钮" v-bind:title="mytitle + '123'"> -->
    <!-- 注意: v-bind: 指令可以被简写为 :要绑定的属性 -->
    <!-- v-bind 中,可以写合法的JS表达式 -->
    View Code

    v-on:Vue提供的事件绑定机制 缩写是 @

    <!-- Vue 中提供了 v-on: 事件绑定机制 -->
    <!-- <input type="button" value="按钮" :title="mytitle + '123'" v-on:click="alert('hello')"> -->
    <input type="button" value="按钮" @click="show">
        <script>
            var vm = new Vue({
                el: '#app',
                data: {
                    msg: '123',
                    msg2: '<h1>哈哈</h1>',
                    mytitle: '这是一个自己定义的title'
                },
                methods: { // 这个 methods属性中定义了当前Vue实例所有可用的方法
                    show: function () {
                        alert('Hello')
                    }
                }
            })
        /* document.getElementById('btn').onclick = function(){
          alert('Hello')
        } */
        </script>
    View Code

    绑定@click事件

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title></title>
        <script src="vue.js"></script>
    </head>
    <body>
        <!-- 创建一个要控制的区域 -->
        <div id="app">
            <h4>{{ msg }}</h4>
            <input type="button" value="开始" @click="start">
            <input type="button" value="停止" @click="stop">
        </div>
    
        <script>
            // 注意:在 VM实例中,如果想要获取 data 上的数据,或者 想要调用 methods 中的 方法,必须通过 this.数据属性名  或  this.方法名 来进行访问,这里的this,就表示 我们 new 出来的  VM 实例对象
            var vm = new Vue({
                el: '#app',
                data: {
                    msg: '提示',
                    intervalId: null // 在data上定义 定时器Id
                },
                methods: {
                    start() {
                        alert("start" + this.msg);
                    },
                    stop() {
                        alert("stop" + this.msg);
                    }
                }
            })
        </script>
    </body>
    </html>
    View Code

    事件修饰符

    使用.stop阻止冒泡

    <input type="button" value="点击" @click.stop="btnHandler">
    <body>
        <div id="app">
            <div class="inner" @click="div1Handler">
                <input type="button" value="点击" @click.stop="btnHandler">
            </div>
        </div>
    
        <script>
              var vm = new Vue({
                  el: '#app',
                  data: {},
                  methods: {
                      div1Handler() {
                          console.log('这是触发了 inner div 的点击事件')
                      },
                      btnHandler() {
                          console.log('这是触发了 btn 按钮 的点击事件')
                      }
                  }
              });
        </script>
    </body>
    View Code

     使用.prevent阻止默认行为

     <a href="http://www.baidu.com" @click.prevent="linkClick">有问题,先去百度</a> 

     使用.capture实现捕获触发事件的机制

     <div class="inner" @click.capture="div1Handler">
            <input type="button" value="戳他" @click="btnHandler">
    </div>

    使用.self 实现只有点击当前元素时候,才会触发事件处理函数

    <div class="inner" @click="div1Handler">
                <input type="button" value="戳他" @click="btnHandler">
    </div>

    使用.once只触发一次事件处理函数

    <a href="http://www.baidu.com" @click.prevent.once="linkClick">有问题,先去百度</a> 

    .stop.self的区别

    <div class="outer" @click="div2Handler">
                <div class="inner" @click="div1Handler">
                    <input type="button" value="戳他" @click.stop="btnHandler">
                </div>
    </div>

    .self只会阻止自己身上冒泡行为的触发,并不会真正阻止 冒泡的行为

    <div class="outer" @click="div2Handler">
              <div class="inner" @click.self="div1Handler">
                <input type="button" value="戳他" @click="btnHandler">
              </div>
    </div> 

     v-model双向绑定

    注意: v-model 只能运用在 表单元素中
    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8" />
        <title></title>
        <script src="vue.js"></script>
    </head>
    <body>
        <div id="app">
            <h4>{{ msg }}</h4>
            <!-- v-bind 只能实现数据的单向绑定,从 M 自动绑定到 V, 无法实现数据的双向绑定  -->
            <!-- <input type="text" v-bind:value="msg" style="100%;"> -->
            <!-- 使用  v-model 指令,可以实现 表单元素和 Model 中数据的双向数据绑定 -->
            <!-- 注意: v-model 只能运用在 表单元素中 -->
            <!-- input(radio, text, address, email....)   select    checkbox   textarea   -->
            <input type="text" style="100%;" v-model="msg">
        </div>
    
        <script>
            // 创建 Vue 实例,得到 ViewModel
            var vm = new Vue({
                el: '#app',
                data: {
                    msg: '大家都是好学生,爱敲代码,爱学习,爱思考,简直是完美,没瑕疵!'
                },
                methods: {
                }
            });
        </script>
    </body>
    </html>
    View Code

     简易计算器

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8" />
        <title></title>
        <script src="vue.js"></script>
    </head>
    <body>
        <div id="app">
            <input type="text" v-model="n1">
    
            <select v-model="opt">
                <option value="+">+</option>
                <option value="-">-</option>
                <option value="*">*</option>
                <option value="/">/</option>
            </select>
    
            <input type="text" v-model="n2">
    
            <input type="button" value="=" @click="calc">
    
            <input type="text" v-model="result">
        </div>
    
        <script>
            // 创建 Vue 实例,得到 ViewModel
            var vm = new Vue({
                el: '#app',
                data: {
                    n1: 0,
                    n2: 0,
                    result: 0,
                    opt: '+'
                },
                methods: {
                    calc() { // 计算器算数的方法
                        // 逻辑:
                        /* switch (this.opt) {
                          case '+':
                            this.result = parseInt(this.n1) + parseInt(this.n2)
                            break;
                          case '-':
                            this.result = parseInt(this.n1) - parseInt(this.n2)
                            break;
                          case '*':
                            this.result = parseInt(this.n1) * parseInt(this.n2)
                            break;
                          case '/':
                            this.result = parseInt(this.n1) / parseInt(this.n2)
                            break;
                        } */
    
                        // 注意:这是投机取巧的方式,正式开发中,尽量少用
                        var codeStr = 'parseInt(this.n1) ' + this.opt + ' parseInt(this.n2)'
                        this.result = eval(codeStr)
                    }
                }
            });
        </script>
    </body>
    </html>
    View Code

    vue中样式:class

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8" />
        <title></title>
        <script src="vue.js"></script>
        <style>
            .red {
                color: red;
            }
    
            .thin {
                font-weight: 200;
            }
    
            .italic {
                font-style: italic;
            }
    
            .active {
                letter-spacing: 0.5em;
            }
        </style>
    </head>
    <body>
        <div id="app">
            <!-- <h1 class="red thin">这是一个很大很大的H1,大到你无法想象!!!</h1> -->
            <!-- 第一种使用方式,直接传递一个数组,注意: 这里的 class 需要使用  v-bind 做数据绑定 -->
            <!-- <h1 :class="['thin', 'italic']">这是一个很大很大的H1,大到你无法想象!!!</h1> -->
            <!-- 在数组中使用三元表达式 -->
            <!-- <h1 :class="['thin', 'italic', flag?'active':'']">这是一个很大很大的H1,大到你无法想象!!!</h1> -->
            <!-- 在数组中使用 对象来代替三元表达式,提高代码的可读性 -->
            <!-- <h1 :class="['thin', 'italic', {'active':flag} ]">这是一个很大很大的H1,大到你无法想象!!!</h1> -->
            <!-- 在为 class 使用 v-bind 绑定 对象的时候,对象的属性是类名,由于 对象的属性可带引号,也可不带引号,所以 这里我没写引号;  属性的值 是一个标识符 -->
            <h1 :class="classObj">这是一个很大很大的H1,大到你无法想象!!!</h1>
        </div>
    
        <script>
            // 创建 Vue 实例,得到 ViewModel
            var vm = new Vue({
                el: '#app',
                data: {
                    flag: true,
                    classObj: { red: true, thin: true, italic: false, active: false }
                },
                methods: {}
            });
        </script>
    </body>
    </html>
    View Code

     vue中样式:style

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8" />
        <title></title>
        <script src="vue.js"></script>
    </head>
    <body>
        <div id="app">
            <!-- 对象就是无序键值对的集合 -->
            <!-- <h1 :style="styleObj1">这是一个h1</h1> -->
            <h1 :style="[ styleObj1, styleObj2 ]">这是一个h1</h1>
        </div>
    
        <script>
            // 创建 Vue 实例,得到 ViewModel
            var vm = new Vue({
                el: '#app',
                data: {
                    styleObj1: { color: 'red', 'font-weight': 200 },
                    styleObj2: { 'font-style': 'italic' }
                },
                methods: {}
            });
        </script>
    </body>
    </html>
    View Code

    v-for

     v-for循环普通数组

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8" />
        <title></title>
        <script src="vue.js"></script>
    </head>
    <body>
        <div id="app">
            <!-- <p>{{list[0]}}</p>
            <p>{{list[1]}}</p>
            <p>{{list[2]}}</p>
            <p>{{list[3]}}</p>
            <p>{{list[4]}}</p> -->
    
            <p v-for="(item, i) in list">索引值:{{i}} --- 每一项:{{item}}</p>
    
        </div>
    
        <script>
            // 创建 Vue 实例,得到 ViewModel
            var vm = new Vue({
                el: '#app',
                data: {
                    list: [1, 2, 3, 4, 5, 6]
                },
                methods: {}
            });
        </script>
    </body>
    </html>
    View Code

    v-for循环对象数组

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8" />
        <title></title>
        <script src="vue.js"></script>
    </head>
    <body>
        <div id="app">
            <p v-for="(user, i) in list">Id:{{ user.id }} --- 名字:{{ user.name }} --- 索引:{{i}}</p>
        </div>
    
        <script>
            // 创建 Vue 实例,得到 ViewModel
            var vm = new Vue({
                el: '#app',
                data: {
                    list: [
                        { id: 1, name: 'zs1' },
                        { id: 2, name: 'zs2' },
                        { id: 3, name: 'zs3' },
                        { id: 4, name: 'zs4' }
                    ]
                },
                methods: {}
            });
        </script>
    </body>
    </html>
    View Code

    v-for循环对象

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8" />
        <title></title>
        <script src="vue.js"></script>
    </head>
    
    <body>
        <div id="app">
            <!-- 注意:在遍历对象身上的键值对的时候, 除了 有  val  key  ,在第三个位置还有 一个 索引  -->
            <p v-for="(val, key, i) in user">值是: {{ val }} --- 键是: {{key}} -- 索引: {{i}}</p>
        </div>
    
        <script>
            // 创建 Vue 实例,得到 ViewModel
            var vm = new Vue({
                el: '#app',
                data: {
                    user: {
                        id: 1,
                        name: '托尼·大颗',
                        gender: ''
                    }
                },
                methods: {}
            });
        </script>
    </body>
    
    </html>
    View Code

    v-for迭代数字

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8" />
        <title></title>
        <script src="vue.js"></script>
    </head>
    
    <body>
        <div id="app">
            <!-- in 后面我们放过  普通数组,对象数组,对象, 还可以放数字 -->
            <!-- 注意:如果使用 v-for 迭代数字的话,前面的 count 值从 1 开始 -->
            <p v-for="count in 10">这是第 {{ count }} 次循环</p>
        </div>
    
        <script>
            // 创建 Vue 实例,得到 ViewModel
            var vm = new Vue({
                el: '#app',
                data: {},
                methods: {}
            });
        </script>
    </body>
    
    </html>
    View Code

    v-for循环中key属性的使用

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8" />
        <title></title>
        <script src="vue.js"></script>
    </head>
    
    <body>
        <div id="app">
    
            <div>
                <label>
                    Id:
                    <input type="text" v-model="id">
                </label>
    
                <label>
                    Name:
                    <input type="text" v-model="name">
                </label>
    
                <input type="button" value="添加" @click="add">
            </div>
    
            <!-- 注意: v-for 循环的时候,key 属性只能使用 number获取string -->
            <!-- 注意: key 在使用的时候,必须使用 v-bind 属性绑定的形式,指定 key 的值 -->
            <!-- 在组件中,使用v-for循环的时候,或者在一些特殊情况中,如果 v-for 有问题,必须 在使用 v-for 的同时,指定 唯一的 字符串/数字 类型 :key 值 -->
            <p v-for="item in list" :key="item.id">
                <input type="checkbox">{{item.id}} --- {{item.name}}
            </p>
        </div>
    
        <script>
            // 创建 Vue 实例,得到 ViewModel
            var vm = new Vue({
                el: '#app',
                data: {
                    id: '',
                    name: '',
                    list: [
                        { id: 1, name: '李斯' },
                        { id: 2, name: '嬴政' },
                        { id: 3, name: '赵高' },
                        { id: 4, name: '韩非' },
                        { id: 5, name: '荀子' }
                    ]
                },
                methods: {
                    add() { // 添加方法
                        this.list.unshift({ id: this.id, name: this.name })
                    }
                }
            });
        </script>
    </body>
    
    </html>
    View Code

    v-if和v-show的使用

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8" />
        <title></title>
        <script src="vue.js"></script>
    </head>
    
    <body>
        <div id="app">
    
            <!-- <input type="button" value="toggle" @click="toggle"> -->
            <input type="button" value="toggle" @click="flag=!flag">
    
            <!-- v-if 的特点:每次都会重新删除或创建元素 -->
            <!-- v-show 的特点: 每次不会重新进行DOM的删除和创建操作,只是切换了元素的 display:none 样式 -->
            <!-- v-if 有较高的切换性能消耗 -->
            <!-- v-show 有较高的初始渲染消耗 -->
            <!-- 如果元素涉及到频繁的切换,最好不要使用 v-if, 而是推荐使用 v-show -->
            <!-- 如果元素可能永远也不会被显示出来被用户看到,则推荐使用 v-if -->
            <h3 v-if="flag">这是用v-if控制的元素</h3>
            <h3 v-show="flag">这是用v-show控制的元素</h3>
    
        </div>
    
        <script>
            // 创建 Vue 实例,得到 ViewModel
            var vm = new Vue({
                el: '#app',
                data: {
                    flag: false
                },
                methods: {
                    /* toggle() {
                      this.flag = !this.flag
                    } */
                }
            });
        </script>
    </body>
    
    </html>
    View Code

      v-if 的特点:每次都会重新删除或创建元素

      v-show 的特点: 每次不会重新进行DOM的删除和创建操作,只是切换了元素的 display:none 样式

      v-if 有较高的切换性能消耗

      v-show 有较高的初始渲染消耗

      如果元素涉及到频繁的切换,最好不要使用 v-if, 而是推荐使用 v-show

      如果元素可能永远也不会被显示出来被用户看到,则推荐使用 v-if

    资料

    https://blog.csdn.net/weixin_39927850/article/details/79105297

    https://cn.vuejs.org/v2/guide/instance.html

  • 相关阅读:
    gdb --configuration
    firecracker 编译
    gvisor 编译
    gvisor
    rust Deref
    rust explicit
    rust move
    rust drop
    出租人对经营租赁的会计处理
    关于以公允价值计量的投资性房地产的处置
  • 原文地址:https://www.cnblogs.com/cnki/p/8353401.html
Copyright © 2011-2022 走看看