Vue快速入门

活动发起人@小虚竹 想对你说:

这是一个以写作博客为目的的创作活动,旨在鼓励大学生博主们挖掘自己的创作潜能,展现自己的写作才华。如果你是一位热爱写作的、想要展现自己创作才华的小伙伴,那么,快来参加吧!我们一起发掘写作的魅力,书写出属于我们的故事。我们诚挚邀请你参加为期14天的创作挑战赛!

提醒:在发布作品前,请将不需要的内容删除。

 

Vue的使用步骤
准备
  • 引入Vue模板(官方提供)

  • 创建Vue程序的应用实例,控制视图的元素

  • 准备元素(div),被Vue控制

    <!-- 准备元素(div),被Vue控制 -->
    <div id="app">
        <h1>{{message}}</h1>
    </div>
    <script type="module">
        //引入Vue模板(官方提供)
        import{ createApp } from 'https://unpkg.com/vue@3/dist/vue.esm-browser.js';
        
        //创建Vue程序的应用实例,控制视图的元素
        createApp({
              
        }).mount('#app');
    </script>
数据驱动视图
  • 准备数据

  • 通过插值表达式渲染页面

    <div id="app">
        <h1>{{message}}</h1>
      </div>
    
      <script type="module">
        import{ createApp } from 'https://unpkg.com/vue@3/dist/vue.esm-browser.js';
        createApp({
             //准备数据
            data(){
                 //指定方法返回值
                return{
                    message:'Hello Vue'
                }
            }
            
        }).mount('#app');
      </script>

Vue常用指令

  • 指令:HTML标签上带有 v- 前缀的特殊属性,不同的指令具有不同的含义,可以实现不同的功能。

  • 常用指令:

指令作用
v-for列表渲染,遍历容器的元素或者对象的属性
v-bind为HTML标签绑定属性值,如设置href,css样式等
v-if / v-else-if / v-else条件性的渲染某元素,判定为true时渲染否则不渲染
v-show根据条件展示某元素,区别在于切换的是display属性的值
v-model在表单元素上创建双向数据绑定
v-on为HTML标签绑定事件
<p v-xxx="...">
    ...
</p>
v-for
  • 作用:列表渲染,遍历容器的元素或者对象的属性

  • 快捷方式:输入vfor按下tab键直接生成结构

  • 语法:

    <tr v-for="(item,index) in items" :key="item.id">{{item}}</tr>
  • 参数说明:

    • items为遍历数组

    • item为遍历出来的元素

    • index为索引/下标,从0开始 ;可以省略,省略index语法:v-for="item in items

    • key:

      • 作用:给元素添加的唯一标识,便于vue进行列表项的正确排序复用,提升渲染性能

      • 推荐使用id作为key(唯一),不推荐使用index作为key(会变化,不对应

  • 注意:遍历的数组,必须在data中定义;要想让哪个标签循环展示多次,就在哪个标签上使用 v-for 指令。

<table>
            <!-- 表头内容省略 -->
            ...
            <!-- 表格主体内容 -->
            <tbody>
                <tr v-for="(e, index) in empList" :key="e.id">
                    
                    <td>{{index +1}}</td>
                    <td>{{e.name}}</td>
                    <td>{{e.gender ==1?'男' : '女'}}</td>
                    <!-- 插值表达式是不能出现在标签内部的,因此图片无法展示 -->
                    <td><img class="avatar" src="{{e.image}}" alt="{{e.name}}"></td>
                    <td>{{e.job}}</td>
                    <td>{{e.entrydate}}</td>
                    <td>{{e.updatetime}}</td>
                    <td class="action-buttons">
                        <button type="button">编辑</button>
                        <button type="button">删除</button>
                    </td>
                </tr>
            </tbody>
    </table>
​
<script type="module">
      import { createApp } from 'https://unpkg.com/vue@3/dist/vue.esm-browser.js'
​
      createApp({
        data() {
          return {
            empList: [
              { "id": 1,
                "name": "谢逊",
                "image": "https://web-framework.oss-cn-hangzhou.aliyuncs.com/2023/4.jpg",
                "gender": 1,
                "job": "1",
                "entrydate": "2023-06-09",
                "updatetime": "2024-09-30T14:59:38"
              },
              {
                "id": 2,
                "name": "韦一笑",
                "image": "https://web-framework.oss-cn-hangzhou.aliyuncs.com/2023/1.jpg",
                "gender": 1,
                "job": "1",
                "entrydate": "2020-05-09",
                "updatetime": "2024-09-01T00:00:00"
              }
            ]
          }
        }
      }).mount('#container')
    </script>
v-bind
  • 作用:动态为HTML标签绑定属性值,如设置href,css,style样式等。

  • 语法:v-bind:属性名=“属性值”

    <img v-bind:src="item.image" width="30px"
  • 简化: :属性名=“属性值”

    <img :src="item.image" width="30px">
  • 注意:动态的为标签的属性绑定值,不能使用插值表达式,得使用 v-bind 指令。且绑定的数据必须在data中定义。

    <td><img class="avatar" v-bind:src="e.image" :alt="e.name"></td>
v-if & v-show
  • 作用:这两类指令都是用来控制元素的显示与隐藏的

  • v-if

    • 语法:v-if="表达式",表达式值为true,显示;false,隐藏

    • 原理:基于条件判断,来控制创建或移除元素节点(条件渲染)

    • 场景:要么显示,要么不显示,不频繁切换的场景

    • 其他:可以搭配 v-else-if / v-else 进行链式调用条件判断

    • 注意:v-else-if 必须出现在 v-if 之后,可以出现多个;v-else 必须出现在 v-if / v-else-if 之后。

    <span v-if="gender ==1">男生</span>
    <span v-else-if="gender ==2">女生</span>
    <span v-else>未知</span>
    <!-- v-if:控制元素的显示与隐藏 -->
    <td>
        <span v-if="e.job == 1">班主任</span>
        <span v-else-if="e.job == 2">讲师</span>
        <span v-else-if="e.job == 3">学工主管</span>
        <span v-else-if="e.job == 4">教研主管</span>
        <span v-else-if="e.job == 5">咨询师</span>
        <span v-else>未知</span>
    </td>
  • v-show

    • 语法:v-show="表达式",表达式值为true,显示;false,隐藏

    • 原理:基于CSS样式display来控制显示与隐藏

    • 场景:频繁切换显示隐藏的场景

    <!-- v-show:控制元素的显示与隐藏 -->
    <td>
        <span v-show="e.job == 1">班主任</span>
        <span v-show="e.job == 2">讲师</span>
        <span v-show="e.job == 3">学工主管</span>
        <span v-show="e.job == 4">教研主管</span>
        <span v-show="e.job == 5">咨询师</span>
    </td>
v-model
  • 作用:在表单元素上使用,双向数据绑定。可以方便的 获取 或 设置 表单数据项。

  • 语法:v-model="变量名"

  • 注意:v-model中绑定的变量,必须在data中定义

 <div id="container">
        <!-- 顶部导航栏 -->
       ...
​
        <!-- 搜索表单区域 -->
        <form class="search-form" action="/search" method="post">
            <label for="name">姓名:</label>
            <input type="text" id="name" name="name" v-model="search-form.name" placeholder="请输入姓名">
            ...
        </form>
    </div>
<script type="module">
      import { createApp } from 'https://unpkg.com/vue@3/dist/vue.esm-browser.js'
​
      createApp({
        data() {
          return {
            searchFrom: {//封装用户输入的查询条件
              name: '',
              gender: '',
              job: '' 
            },
            empList: [
              { "id": 1,...},
              {...},
              {...}
            ]
          }
        }
      }).mount('#container')
    </script>
v-on
  • 作用:为html标签绑定事件(添加事件监听)

  • 语法:

    • v-on:事件名="方法名"

    • 简写为 @事件名=" ... "

<div id="app">
    <button type="button" v-on:click="handle">
        点我
    </button>
    <button type="button" @click="handle">
        再点我
    </button>
</div>
<!--...-->
<script>
const app=createApp({
    data() {
        //...
    },
    methods:{
    handle(){
        console.log('试试就试试');
     }
    },
      }).mount('#app');
</script>

前后端异步交互Ajax

什么是Ajax
  • 介绍:Asynchronous JavaScript And XML,异步的JavaScript和XML。

  • 作用:

    • 数据交换:通过Ajax可以给服务器发送请求,并获取服务器相应的数据。

    • 异步交互:可以在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页的技术,如:搜索联想、用户是否可用的校验等等(在浏览器下搜索关键字下方会自动弹出你可能想要搜索的结果)。

  • 同步与异步:

Axios
  • 介绍:Axois对原生的Ajax进行了封装,简化书写,快速开发。

  • 官网:https://www.axios-http.cn/

  • 步骤:

    • 引入Axios的js文件(参照官网)

    <script scr="https://unpkg.com/axios/dist/axios.min.js"></script>
    • 使用Axios发送请求,并获取相应结果

      • method:请求方式,GET/POST

      • url:请求路径

      • data:请求数据(POST)

      • params:发送请求时携带的url参数 如:...?key=val

    <script>
            //发送GET请求 
        document.querySelector('#btnGet').addEventListener('click', () => {
            //axios发起异步请求
            axios({
                url: 'http://mock.apifox.cn/m1/3083103-0-default/emps/list',
                method: 'GET'
            }).then((result)=>{//成功回调函数
                console.log(result);
            }).catch((error)=>{//失败回调函数
                console.log(error);
            })
        })
            
         //发送POST请求 
        document.querySelector('#btnPost').addEventListener('click', () => {
            axios({
                url: 'http://mock.apifox.cn/m1/3083103-0-default/emps/update',
                method: 'POST',
                data:'id=1'//post请求方式,请求体
            }).then((result)=>{//成功回调函数
                console.log(result);
            }).catch((error)=>{//失败回调函数
                console.log(error);
           })
        })
    </script>

  • 为了方便起见,Axios已经为所有支持的请求方法提供了别名

  • 格式(推荐方式):axios.请求方式(url [ , data [ , config ] ] )

  • 快捷键:在get(‘axios.get('http://mock.apifox.cn/m1/3083103-0-default/emps/list')’)后输入thenc然后按下tab键即可直接生成成功回调函数和失败回调函数格式

<script>
    //发送GET请求
    axios.get('http://mock.apifox.cn/m1/3083103-0-default/emps/list').then((result) => {
        console.log(result.data);
    })
        
    //发送POST请求
    document.querySelector('#btnPost').addEventListener('click', () => {
        axios.post('http://mock.apifox.cn/m1/3083103-0-default/emps/update','id=1').then((result) => {
        console.log(result.data);
   })
})
    </script>
async & await
  • 可以通过async、await可以让异步变为同步操作。async就是来声明一个异步方法,await是用来等待异步任务执行。

  • 注意:await关键字只在async函数内有效,await关键字取代then函数,等待获取到请求成功的结果值。

methods: {
	async search(){
		// 发送ajax请求,获取数据
        let result = await axios.get(`web-server.itheima.net/emps/list?name=${this.searchForm.name}&gender=${this.searchForm.gender}&job=${this.searchForm.job}`)
         this.empList = result.data.data;
     }
},
Vue的生命周期
  • 生命周期:指一个对象从创建到销毁的整个过程。

  • 生命周期的八个阶段:每触发一个生命周期事件,会自动执行一个生命周期方法(钩子)。

  • vue声明周期典型的应用场景:在页面加载完毕时,发起异步请求,加载数据,渲染页面。

状态(vue2中)阶段周期
beforeCreate创建前
created创建后
beforeMount载入前
mounted挂载完成
beforeUpdate数据更新前
updated数据更新后
beforeUnmount组件销毁前
unmounted组件销毁后
 
<script type="module">
      import { createApp } from 'https://unpkg.com/vue@3/dist/vue.esm-browser.js'
      createApp({
        data() {
          return {
            searchForm: { //封装用户输入的查询条件
                ...
            },
            empList: []
          }
        },
        //方法
        methods: {
            async search(){
                ...
            },
            clear(){
               ...
            }
        },
            
        //钩子函数
        mounted(){
            //页面加载完成之后,发送ajax请求,获取数据
            this.search()
        }
      }).mount('#container')
    </script>

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值