Loading

vue快速上手指北

1.Vue简介

1.1. Vue是什么

Vue.JS是优秀的前端 JavaScript 框架

库和框架的区别:

  • 库(如jQuery)

    库是工具. 提供大量API,体现了封装的思想、需要自己调用这些API

  • 框架

    框架提供了一套完整解决方案,

    使用者要按照框架所规定的某种规范进行开发

1.2. 为什么要学习 Vue

随着项目业务场景的复杂,传统模式(html+jquery)已无法满足需求

就出现了Angular/React/Vue等框架

  • 企业需求
  • 主流框架之一(React Angular Vue)
  • 易用、灵活、高效

1.3. Vue 能做什么

  • 最大程度上解放了 DOM 操作
  • 单页web项目(SinglePageApplication项目,例如Worktile官网)开发
  • 传统网站开发

1.4. 核心特性

  • 双向数据绑定
  • 通过 指令 扩展了 HTML,通过 表达式 绑定数据到 HTML
  • 解耦视图与数据
  • 可复用组件
  • 虚拟DOM
  • M-V-VM模型
  • 数据驱动视图

1.5. 学习链接

Vue官方文档
Vue开源项目汇总
Vue.js中文社区

2. Vue快速入门

2.1. 安装Vue

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

2.2. Vue入门程序 HelloWorld

作用:将数据应用在html页面中

  1. body中,设置Vue管理的视图<div id="app"></div>
  2. 引入vue.js
  3. 实例化Vue对象 new Vue();
  4. 设置Vue实例的选项:如el、data...
    new Vue({选项:值});
  5. <div id='app'></div>中通过{{ }}使用data中的数据
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Vue快速入门</title>
</head>
<body>
    <!--设置vue管理的视图-->
    <div id="app">
        <!--在视图里使用Vue实例中data里面的list数据-->
        <p>{{ list }}</p>
    </div>

    <!--引入vue.js文件-->
    <script src="js/vue.js"></script>
    <!--实例化vue对象-->
    <script type="text/javascript">
        new Vue({
            el : '#app',
            data : {
                list : '我是模拟发起ajax请求后.从服务器端返回的数据'
            }
        });
    </script>
</body>
</html>

在这里插入图片描述

2.3. Vue参数详解

el

el作用:指定当前Vue实例所管理的视图,值通常是id选择器

  1. el的值可以是css选择器,通常是id选择器
  2. el的值不能是html标签和body标签

data

data作用:指定当前Vue实例的数据对象

  1. data中的数据是响应式数据
  2. 值可以是一个对象
  3. 所有数据部分写在data中
  4. 在当前Vue实例所管理的视图中通过属性名使用data中的数据
  5. 可以通过vm.$data.属性 访问数据
  6. 可以通过vm.属性 访问数据(更简单)

methods

methods作用:指定当前Vue实例中的方法

  1. 可以直接通过vm实例访问这些方法,

  2. 方法中的 this 自动绑定为 Vue 实例。

代码演示

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <!--设置vue所管理的视图-->
    <div id="a">
        <!--在vue视图中, 使用Vue实例中data里面的数据-->
        {{msgA}} --- {{fn1()}}
    </div>

    <!--引入Vue.js-->
    <script type="text/javascript" src="js/vue.js"></script>
    <script type="text/javascript">
        <!--创建Vue实例-->
        const vm = new Vue({
            el:"#a",
            data:{
                msgA:'第一个Vue实例对象'
            },
      methods:{
        fn1:function(){
          console.log(this.msgA);
          console.log('vm实例中的methods里的fn1方法被调用');
        },
        fn2:function(){
          this.fn1();
          console.log('fn2方法被调用');
        },
      }
        });
    </script>
</body>
</html>

插值表达式

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

  • 通过任何方式修改所绑定的数据,所显示的数据都会被实时替换
  • 在插值表达式中不能写js语句, 例如 var a = 10; 分支语句 循环语句

格式

{{}}

代码演示

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>插值表达式</title>
  </head>
  <body>
    <!-- 设置Vue所管理的视图 -->
    <div id= "app">
      <!-- 获取Vue对象中data里的数据 -->
      {{name}}
      <p>{{name}}</p>
      <p>{{name+'哈哈哈'}}</p>
      <p>{{name.split("")}}</p>
      <p>{{age>18?'成年':'未成年'}}</p>
    </div>
    
    <!-- 加载Vue.js文件 -->
    <script type="text/javascript" src="js/vue.js"></script>
    <!-- 创建Vue对象 -->
    <script type="text/javascript">
      const vm = new Vue({
        el:'#app',
        data:{
          name:'迪丽热巴',
          age:20
        }
      });
    </script>
  </body>
</html>

3. Vue常用指令

Vue框架提供的语法, 扩展了html标签的功能、大部分的指令的值是js的表达式. 用于取代DOM操作

3.1. v-textv-html

很像innerText和innerHTML

document.getElementById("mydiv").innerHTML = "<h1>海马</h1>"; // 有html效果
document.getElementById("mydiv").innerText = "<h1>海马</h1>"; // 没有html效果, 将整个作为字符串处理
  • v-text:更新标签中的内容
    • v-text和插值表达式的区别
      • v-text 更新整个标签中的内容
      • 插值表达式: 更新标签中局部的内容
  • v-html:更新标签中的内容/标签
    • 可以渲染内容中的HTML标签
    • 注意:尽量避免使用,容易造成危险 (XSS跨站脚本攻击)
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
  </head>
  <body>
    <!-- 设置vue所管理的视图 -->
    <div id="app">
      <!-- 获取Vue对象中data里的数据 -->
      <p>{{text}},我是p标签中的内容</p>
      <p v-text="text">我是p标签中的内容</p>
      <p v-text="html">我是p标签中的内容</p>
      <p v-html="text">我是p标签中的内容</p>
      <p v-html="html">我是p标签中的内容</p>
    </div>
    
    <!-- 引入Vue.js文件 -->
    <script type="text/javascript" src="../js/vue.js"></script>
    <!-- 创建Vue对象 -->
    <script type="text/javascript">
      const vm = new Vue({
        el:'#app',
        data:{
          text:'点我试试看',
          html:'<a href="http://www.itcast.cn">试试就试试</a>'
        }
      });
    </script>
  </body>
</html>

3.2. v-ifv-show

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

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
  </head>
  <body>
    <!-- 设置vue所管理的视图 -->
    <div id="app">
      <!-- 获取vue对象中data里的数据 -->
      <p v-if="isShow">我是v-if数据</p>
      <p v-show="isShow">我是v-show数据</p>
    </div>
    
    <!-- 引入Vue.js -->
    <script type="text/javascript" src="../js/vue.js"></script>
    <!-- 创建Vue对象 -->
    <script type="text/javascript">
      new Vue({
        el:'#app',
        data:{
          isShow:false
        }
      });
    </script>
  </body>
</html>

在这里插入图片描述

v-if 的值为false的时候是直接删除该标签,而 v-show 则是采用css样式设置为不显示的方式

v-if 有更高的切换开销,而 v-show 有更高的初始渲染开销。
因此,如果需要非常频繁地切换,则使用 v-show 较好;
如果在运行时条件很少改变,则使用 v-if 较好。

3.3. v-on

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

  • 语法:

  • v-on:事件名.修饰符 = "methods中的方法名" ; v-on的简写方法: @事件名.修饰符 = "methods中的方法名"

  • 修饰符

    • .stop 调用 event.stopPropagation()。
    • .prevent 调用event.preventDefault()。
    • .capture 添加事件侦听器时使用 capture 模式。
    • .self 只当事件是从侦听器绑定的元素本身触发时才触发回调。
    • .{keyCode | keyAlias} - 只当事件是从特定键触发时才触发回调。
    • .native 监听组件根元素的原生事件。
    • .once 只触发一次回调。
    • .left (2.2.0) 只当点击鼠标左键时触发。
    • .right (2.2.0) 只当点击鼠标右键时触发。
    • .middle (2.2.0) 只当点击鼠标中键时触发。
    • .passive (2.3.0) 以 { passive: true } 模式添加侦听器
<!DOCTYPE html>
<html lang="en" xmlns:v-on="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <button onclick="location.href='http://www.baidu.com'">百度</button>
    <button onclick="method1()">百度</button>

    <div id="app">
        <!--需求: 点击按钮 修改 点击次数-->
        <!--在事件内 直接书写js代码-->
        <!--1 原始方式-->
        <button v-on:click="count++">按钮1</button>
        <!--2 简化方式-->
        <button @click="count++">按钮2</button>
        <!--3 给事件绑定方法-->
        <button @click="fn1()">按钮3</button>
        <!--4 给事件绑定方法, 还要给方法传递参数-->
        <button @click="fn2(count)">按钮4</button>

        <!--5 限制点击事件只会被执行一次-->
        <button @click="fn3()">按钮5</button>
        <button @click="fn3">按钮52222222</button>
        <button @click.once="fn3()">按钮6</button>



        <p>上面的按钮被点击的次数: {{count}}</p>
    </div>
    <script src="js/vue.js"></script>
    <script>
        new Vue({
            el : "#app",
            data : {
                count : 0
            },
            methods : {
                fn1 : function() {
                    console.info("方法一 被调用了... ...")
                    this.count++;
                },
                fn2 : function(cou) {
                    console.info("按钮被点击的次数: " + cou);
                },
                fn3 : function () {
                    console.info("方法三 被调用了... ...")
                }
            }
        });
    </script>
</body>
</html>

3.4. v-for

v-for作用: 列表渲染,当遇到相似的标签结构时,就用v-for去渲染

  • 格式
    • 数组或集合
      (item,index) in 数组或集合
      参数item:数组中的每个元素
      参数index:数组中元素的下标
      
    • 对象
      (value, key, index) in 对象
      参数index:对象中每对key-value的索引 从0开始
      参数key:键  
      参数value:值
      

代码演示

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div id="app">
    <!--获取vue中data里面的数据-->
    <!--遍历数组-->
    <p v-for="(item, index) in arr">{{index+1}} ===== {{item}}</p>
    <hr/>

    <!--遍历对象-->
    <p v-for="(value, key, index) in person">{{index+1}} ==== {{key}} ==== {{value}}</p>
    <hr/>

    <!--遍历对象数组-->
    <p v-for="(person, index) in personArr">{{index+1}} ===== {{person.name}} ==== {{person.age}} ===== {{person.gender}}</p>
</div>
<script src="js/vue.js"></script>
<script>
    new Vue({
        el : "#app",
        data : {
            arr : ["张三", "李四", "王五"],
            person : {name:"刘备", age:"25", gender:"男"},
            personArr : [
                {name:"刘备", age:"25", gender:"男"},
                {name:"关羽", age:"28", gender:"男"},
                {name:"张飞", age:"29", gender:"男"},
            ]
        }
    });
</script>
</body>
</html>

3.5. v-bind

作用: 可以绑定标签上的属性

格式:

v-bind:属性="值"

简写格式

:属性="值"

属性值一部分进行替换的格式

:属性="'常亮值' + vue对象data中的数据"

代码演示

<!DOCTYPE html>
<html xmlns:v-bind="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="utf-8" />
    <title>v-bind</title>

</head>
<body>
<div id="app">
  <!--完整写法-->
    <font size="5" v-bind:color="ys1">颜色1</font>
    <!--简写-->
    <font size="5" :color="ys2">颜色2</font>
    <hr>
    <!--拼接的写法-->
    <a href="http://www.baidu.com">百度</a><br/>
    <a :href="'http://' + url">百度2</a><br/>
</div>

<script src="js/vue.js"></script>
<script type="text/javascript">
    new Vue({
        el:'#app',
        data:{
            ys1:"red",
            ys2:"yellow",
            url:"www.baidu.com"
        }
    });
</script>
</body>
</html>

3.6. v-model

作用: 表单元素的绑定

特点: 双向数据绑定

  • vue对象中的数据发生变化可以更新到界面
  • 通过界面可以更改vue对象中数据
  • v-model 会忽略所有表单元素的 valuecheckedselected 特性的初始值而总是将 Vue 实例的数据作为数据来源。应该在 data选项中声明初始值。

代码演示

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>v-model</title>

</head>
<body>
<div id="app">
    姓名:<input type="text" id="username" v-model="user.username"><br>
    密码:<input type="password" id="password" v-model="user.password"><br>
    <input type="button" @click="fun" value="获取">
    <input type="button" @click="fun2()" value="修改">
</div>
<script src="js/vue.js"></script>
<script>
    new Vue({
        el: '#app',
        //表示当前vue对象接管了div区域
        data:{
            //设置初始值
            user:{username:"zhangsan",password:"123"} ,
        },
        methods:{
            fun:function(){
                //获取界面输入后,更新的值
                console.info(this.user.username);
                console.info(this.user.password);
            },
            fun2:function() {
                //对数据的值 再次赋值进行更新
                this.user.username = "武松";
                this.user.password = "555555555";
            }
        }
    });
</script>
</body>
</html>

4. Vue的生命周期

Vue生命周期生命周期是指Vue实例或者组件从诞生到消亡经历的每一个阶段,在这些阶段的前后可以设置一些函数当做事件来调用。
在这里插入图片描述
vue生命周期可以分为八个阶段,分别是:

  1. beforeCreate(创建前)
  2. created(创建后)
  3. beforeMount(载入前)
  4. mounted(载入后)
  5. beforeUpdate(更新前)
  6. updated(更新后)
  7. beforeDestroy(销毁前)
  8. destroyed(销毁后)

我们如果想在页面加载完毕后就要执行一些操作的话,可以使用created和mounted钩子函数

5. Vue的Ajax异步请求 axios

在Vue.js中发送网络请求本质还是ajax,我们可以使用插件方便操作。

axios :不是vue的插件,可以在任何地方使用,推荐

说明: 既可以在浏览器端又可以在node.js中使用的发送http请求的库,支持Promise,不支持jsonp

如果遇到jsonp请求, 可以使用插件 jsonp 实现

5.1. 发送get请求

axios.get('/user?id=12345')
    .then(response => {
      console.log(response.data);
  })
    .catch(error => {
      console.dir(error)
  });

5.2. 发送post请求

axios.post('/user', "name=迪丽热巴&age=23")
    .then(response => {
    console.log(response.data);
  })
    .catch(error => {
    console.dir(err)
    });
posted @ 2021-03-27 15:51  克豪  阅读(91)  评论(0)    收藏  举报