zoukankan      html  css  js  c++  java
  • Vue复习(一)

    Vue 复习(一)

    Vue.js 不支持 IE8及以下版本

    1. 安装

    1.1 直接下载源码然后通过相对路径引入

    1.2 CDN

    1.3 使用npm下载

    npm init -y
    npm i vue
    

    2. Hello world

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Hello World</title>
        <script src="./vue.js"></script>
    </head>
    <body>
        <div id="app">
            <p>{{msg}}</p>
        </div>
        <script>
            new Vue({
                el:"#app",
                data () {
                    return {
                        msg:"Hello World"
                    }
                }    
            })
        </script>
    </body>
    </html>
    

    3. Vue实例的选项(基础)

    3.1 el

    • 作用:当前Vue实例所管理的html视图
    • 值:通常是id选择器(或者是一个 HTMLElement 实例)
    • 不要让el所管理的视图是html或者body

    3.2 data

    • Vue 实例的数据对象,是响应式数据(数据驱动视图)
    • 可以通过 vm.$data 访问原始数据对象
    • Vue 实例也代理了 data 对象上所有的属性,因此访问 vm.a 等价于访问 vm.$data.a
    • 视图中绑定的数据必须显式的初始化到 data 中

    3.3 methods

    • 其值为可以一个对象
    • 可以直接通过 VM 实例访问这些方法,或者在指令表达式中使用
    • 方法中的 this 自动绑定为 Vue 实例。
    • 注意,不应该使用箭头函数来定义 method 函数 (例如 plus: () => this.a++)。理由是箭头函数绑定了父级作用域的上下文,所以 this 将不会按照期望指向 Vue 实例,this.a 将是 undefined

    3.4 代码演示

    <div id="a">
        {{msgA}} -- {{fn1()}}
    </div>
    
    <script src="./vue.js"></script>
    <script>
        const vm = new Vue({
            // el作用:指定当前Vue实例所管理的视图,值通常是id选择器
            // 1. el的值可以是css选择器,通常是id选择器
            // 2. el的值不能是html标签和body标签
    
            el: '#a',
            // data作用:指定当前Vue实例的数据对象
            // 1. data中的数据是响应式数据
            // 2. 值可以是一个对象 {属性: 值}
            // 3. 所有数据部分写在data中
            // 4. 在当前Vue实例所管理的视图中通过属性名使用data中的数据
            // 5. 可以通过vm.$data.属性 访问数据
            // 6. 可以通过vm.属性 访问数据(更简单)
            data: {
                msgA: '第一个Vue实例对象'
            },
            // methods作用:指定当前Vue实例中的方法
            // 1. 可以直接通过vm实例访问这些方法,
            // 2. 方法中的 this 自动绑定为 Vue 实例。
            // 3. 不推荐使用箭头函数
            methods: {
                fn1: function() {
                    console.log(this.msgA);
                    console.log('vm实例中的methods里的fn1方法被调用');
                },
                fn2: function() {
                    this.fn1();
                    console.log('fn2方法被调用--');
                },
                fn3: () => {
                    console.log(this);
                }
            }
        });
        // 调用fn2方法
        vm.fn2();
        // 调用fn3方法
        vm.fn3();
    </script>
    

    4. Vue.js术语

    插值表达式

    作用:会将绑定的数据实时的显示出来:

    通过任何方式修改所绑定的数据,所显示的数据都会被实时替换

    {{js表达式、三目运算符、方法调用等}}

    不能写 var a = 10; 分支语句 循环语句

        <div id="app">
            <!-- 在插值表达式中可以访问vm实例中data里面的属性 -->
            {{message}}
            <p>{{message}}</p>
            <p>{{message+'啦啦啦'}}</p>
            <p>{{age>18?'成年':'未成年'}}</p>
            <p>{{message.split("")}}</p>
            <!-- 在插值表达式中不能写js语句 -->
            <p>{{var a = 10}}</p>
        </div>
        <!-- 引入vue.js -->
        <script src="./vue.js"></script>
        <script>
            const vm = new Vue({
                el: '#app',
                data: {
                    message: '我是data中的message属性的值',
                    age: 20
                }
            });
        </script>
    

    插值表达式中不能写js语句, 如var a = 10;

    指令

    指令 (Directives) 是带有 v- 前缀的特殊特性。

    指令特性的值预期是单个 JavaScript 表达式(v-for 是例外情况,稍后我们再讨论)。

    指令的职责是,当表达式的值改变时,将其产生的连带影响,响应式地作用于 DOM。

    Vue框架提供的语法

    扩展了HTML的能力

    减少DOM操作

      <div id="app">
            <p> {{message}}</p>
            <!-- v-on就是vue给标签元素提供的扩展-指令
                v-on指令就是给标签绑定事件,这里是click,
                当事件处于点击状态时,出发methods中的changeMsg方法
            -->
            <button v-on:click="changeMsg">按钮</button>
        </div>
        <!-- 引入vue.js -->
        <script src="./vue.js"></script>
        <script>
            const vm = new Vue({
                el: '#app',
                data: {
                    message: '我是data中的message属性的值',
                    age: 20
                },
                methods: {
                    changeMsg: function() {
                        this.message += "啦";
                    }
                }
            });
        </script>
    

    5. Vue常用命令

    扩展了html标签的功能、大部分的指令的值是js的表达式 ,取代DOM操作 ,这里介绍常用的几个,具体请看Vue.js官方文档 https://cn.vuejs.org/v2/guide/

    5.1 v-text 和v-html

    • v-text:更新标签中的内容
      • v-text和插值表达式的区别
        • v-text 更新整个标签中的内容
        • 插值表达式: 更新标签中局部的内容
    • v-html:更新标签中的内容/标签
      • 可以渲染内容中的HTML标签
      • 注意:尽量避免使用,容易造成危险 (XSS跨站脚本攻击)
    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
        <script src="./vue.js"></script>
    </head>
    
    <body>
        <div id="app">
            <!-- 替换标签的全部内容 -->
            <p v-text="msg">我是P标签的全部内容</p>
            <p v-text="msg">{{count}}</p>
            <p>{{msg}}</p>
            <br>
            <p v-text="str"></p>
            <!-- v-html 可以识别字符串标签 -->
            <p v-html="str"></p>
            <p v-html="stralert"></p>
    
        </div>
        <script>
            var vm = new Vue({
                el: "#app",
                data() {
                    return {
                        msg: 'abc',
                        count: 100,
                        str:'<span>span标签</span>',
                        stralert:'<span onclick="alert(1)">span标签</span>'
                    }
                },
                methods: {
    
                }
            })
        
        </script>
    </body>
    </html>
    

    5.2 v-if 和v-show

    作用:根据表达式的bool值进行判断是否渲染该元素,

    v-if 有更高的切换开销,而 v-show 有更高的初始渲染开销。

    因此,如果需要非常频繁地切换,则使用 v-show 较好;

    如果在运行时条件很少改变,则使用 v-if 较好。

     <div id="app">
            <!-- 如果isShow的值是true ,就显示p标签 -->
            <p v-if="isShow">我是p标签中的内容</p>
            <p v-show="isShow">我是p标签中的内容</p>
            <!-- 如果标签显示与隐藏切换频繁, 就使用v-show 
                v-show本质是通过修改标签的display值
            -->
        </div>
        <script src="./vue.js"></script>
        <script>
            new Vue({
                el: '#app',
                data: {
                    isShow: false
                }
            });
        </script>
    

    5.3 v-on

    简写: @事件名.修饰符 = 'methods中的方法名'

    • 作用:使用 v-on 指令绑定 DOM 事件,并在事件被触发时执行一些 JavaScript 代码。

    • 语法: @事件名.修饰符 = "methods中的方法名"

    • 注意: $event 可以传形参

       <div id="app">
              <!-- v-on.xx事件名='当触发xx事件时执行的语句' -->
              <!-- 执行一段js语句:可以使用data中的属性 -->
              <button v-on:click="count += 1">增加 1</button>
              <!-- v-on的简写方法 -->
              <button @click="count += 1">增加 1</button>
              <!-- 执行一个方法 -->
              <button @click="add">增加 1</button>
              <!-- 执行一个方法、这种写法可以传形参 -->
              <button @click="fn1(count)">执行fn1方法</button>
              <!-- 执行一个方法、这种写法可以传形参,特殊的形参$event -->
              <button @click="fn2($event)">执行fn2方法</button>
              <hr>
              <!-- 和v-for结合使用 -->
              <button @click="fn3(index)" v-for="(item, index) in items">执行fn3方法</button>
              <!-- v-on修饰符 如 once: 只执行一次 -->
              <button @click.once="fn4">只执行一次</button>
      
              <p>上面的按钮被点击了 {{ count }} 次。</p>
          </div>
          <script src="./vue.js"></script>
          <script>
              new Vue({
                  el: '#app',
                  data: {
                      count: 0,
                      items: ['a', 'b', 'c']
                  },
                  methods: {
                      add: function() {
                          this.count += 1;
                      },
                      fn1: function(count) {
                          console.log(count);
                          console.log('fn1方法被执行');
                      },
                      fn2: function(e) {
                          console.log(e);
                          console.log('fn2方法被执行');
                      },
                      fn3: function(index) {
                          console.log(index);
                          console.log('fn3方法被执行');
                      },
                      fn4: function() {
                          console.log('fn4方法被执行了');
                      }
                  }
              });
          </script>
      
    • 修饰符

      • .once - 只触发一次回调。
      • .prevent - 调用 event.preventDefault()
  • 相关阅读:
    格式化数字,将字符串格式的数字,如:1000000 改为 1 000 000 这种展示方式
    jquery图片裁剪插件
    前端开发采坑之安卓和ios的兼容问题
    页面消息提示,上下滚动
    可以使用css的方式让input不能输入文字吗?
    智慧农村“三网合一”云平台测绘 大数据 农业 信息平台 应急
    三维虚拟城市平台测绘 大数据 规划 三维 信息平台 智慧城市
    农业大数据“一张图”平台测绘 大数据 房产 国土 农业 信息平台
    应急管理管理局安全生产预警平台应急管理系统不动产登记 测绘 大数据 规划 科教 三维 信息平台
    地下综合管廊管理平台测绘 大数据 地下管线 三维 信息平台
  • 原文地址:https://www.cnblogs.com/qzdd/p/12795252.html
Copyright © 2011-2022 走看看