【DAY2】

JS+Vue+Ajax

1)JS核心语法

1.1输出

在JS中有3种输出语句,分别是:

api 描述
window.alert(…) 警告框
document.write(…) 在HTML 输出内容
console.log(…) 写入浏览器控制台
1.2变量常量

变量

关键字 作用域类型 说明
var 函数作用域(Function Scope) 在函数内声明的变量,函数外不可访问;在函数外声明的是全局变量。
let 块级作用域(Block Scope) 只在 {} 块内有效,比如 ifforwhile 等块中。

常量

在JS中,如果声明一个场景,需要使用const关键字。一旦声明,常量的值就不能改变(不可以重新赋值)

1.3数据类型

主要包含以下几种类型:

数据类型 描述
number 数字(整数、小数、NaN(Not a Number))
string 字符串,单双引(‘…’)、双引号(“…”)、反引号(...)皆可,正常使用推荐单引号
boolean 布尔。true,false
null 对象为空。 JavaScript 是大小写敏感的,因此 null、Null、NULL是完全不同的
undefined 当声明的变量未初始化时,该变量的默认值是 undefined

使用typeof 关键字可以返回变量的数据类型,接下来我们需要通过书写代码来演示js中的数据类型

对于字符串类型的数据,除了可以使用双引号(“…”)、单引号(‘…’)以外,还可以使用反引号 (``)。 而使用反引号引起来的字符串,也称为 模板字符串

  • 模板字符串的使用场景:拼接字符串和变量。
  • 模板字符串的语法:
    • ... :反引号 (英文输入模式下键盘 tab 键上方波浪线 ~ 那个键)
    • 内容拼接时,使用 ${ } 来引用变量
  <script>
    let name = 'Tom';
    let age = 18;
    console.log('大家好, 我是新入职的' + name + ', 今年' + age + '岁了, 请多多关照'); //原始方式 , 手动拼接字符串
    console.log(`大家好, 我是新入职的${name}, 今年${age}岁了, 请多多关照`); //使用模板字符串方式拼接字符串
  </script>
1.4函数

格式一:

function 函数名(参数1,参数2..){
    要执行的代码
}

注意:

  • 形参不需要声明类型,并且JS中不管什么类型都是let去声明,加上也没有意义。
  • 返回值也不需要声明类型,直接return即可

格式二:

匿名函数定义可以通过两种方式:函数表达式 和 箭头函数。

  • 示例一(函数表达式):
var add = function (a,b){
    return a + b;
}
  • 示例二(箭头函数):
var add = (a,b) => {
    return a + b;
}
1.5自定义对象
let 对象名 = {
    属性名1: 属性值1,
    属性名2: 属性值2,
    属性名3: 属性值3,
    方法名称: function(形参列表){}
    //函数也可简化成
    方法名(){
             //...
         }
};
1.6JSON

JSON是通过JavaScript标记法书写的文本

{
    "key":value,
    "key":value,
    "key":value
}

其中,key必须使用引号并且是双引号标记,value可以是任意数据类型。

而由于语法简单,层级结构鲜明,现多用于作为数据载体,在网络中进行数据传输。

API说明:

JSON.stringify(…):作用就是将js对象,转换为json格式的字符串。

JSON.parse(…):作用就是将json格式的字符串,转为js对象。

1.7DOM

将 HTML 文档的各个组成部分封装为对象

作用:

  • 改变 HTML 元素的内容
  • 改变 HTML 元素的样式(CSS)
  • 对 HTML DOM 事件作出反应
  • 添加和删除 HTML 元素

**DOM的核心思想:**将网页的内容当做对象来处理,标签的所有属性在该对象上都可以找到,并且修改这个对象的属性,就会自动映射到标签身上。

document对象

  • 网页中所有内容都封装在document对象中
  • 它提供的属性和方法都是用来访问和操作网页内容的,如:document.write(…)

DOM操作步骤:

  • 获取DOM元素对象
  • 操作DOM对象的属性或方法 (查阅文档)

可以通过如下两种方式来获取DOM元素:

  • 根据CSS选择器来获取DOM元素,获取到匹配到的第一个元素:document.querySelector('``CSS选择器``');
  • 根据CSS选择器来获取DOM元素,获取匹配到的所有元素:document.querySelectorAll('CSS选择器');

注意:获取到的所有元素,会封装到一个NodeList节点集合中,是一个伪数组(有长度、有索引的数组,但没有push、pop等数组方法)

eg:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>JS-DOM</title>
</head>
<body>

  <h1 id="title1">11111</h1>
  <h1>22222</h1>
  <h1>33333</h1>

  <script>
    //1. 修改第一个h1标签中的文本内容
    //1.1 获取DOM对象
    // let h1 = document.querySelector('#title1');
    //let h1 = document.querySelector('h1'); // 获取第一个h1标签

    let hs = document.querySelectorAll('h1');

    //1.2 调用DOM对象中属性或方法
    hs[0].innerHTML = '修改后的文本内容';
  </script>
</body>
</html>
1.8JS事件监听

JS事件监听的语法:

事件源.addEventListener('事件类型', 要执行的函数);

eg:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>JS-事件-事件绑定</title>
</head>

<body>
    <input type="button" id="btn1" value="点我一下试试1">
    <input type="button" id="btn2" value="点我一下试试2" onclick="on()">
        
    <script>
        document.querySelector("#btn1").addEventListener('click', ()=>{
            alert("按钮1被点击了...");
        })
        
        function on(){
        	alert('试试就试试')
    	}
    </script>
</body>
</html>

addEventListener 与 on事件 区别:

  • on方式会被覆盖,addEventListener 方式可以绑定多次,拥有更多特性,推荐使用 addEventListener .
1.9常见事件

在这里插入图片描述

2)Vue

2.1概述

用于构建用户界面渐进式的JavaScript框架让你专注于“数据”和“逻辑”,它帮你自动更新网页,让开发更快

2.2入门程序

准备工作:

  • 准备一个html文件,并在其中引入Vue模块 (参考官方文档,复制过来即可)【注意:模块化的js,引入时,需要设置 type="module"
  • 创建Vue程序的应用实例,控制视图的元素
  • 准备元素(div),交给Vue控制

在这里插入图片描述

  • 准备数据。 在创建Vue应用实例的时候,传入了一个js对象,在这个js对象中,我们要定义一个data方法,这个data方法的返回值就是Vue中的数据。
  • 通过插值表达式渲染页面。 插值表达式的写法:{{…}}

在这里插入图片描述

注意:

  • Vue中定义数据,必须通过data方法来定义,data方法返回值是一个对象,在这个对象中定义数据。
  • 插值表达式中编写的变量,一定是Vue中定义的数据,如果插值表达式中编写了一个变量,但是在Vue中未定义,将会报错 。
  • Vue应用实例接管的区域是 ‘#app’,超出这个范围,就不受Vue控制了,所以vue的插值表达式,一定写在 <div id="app">...</div> 的里面
2.3Vue指令

指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标签绑定事件
2.3.1 v-for

**作用:**列表渲染,遍历容器的元素或者对象的属性

语法:<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 指令。

2.3.2 v-bind

作用:动态为HTML标签绑定属性值,如设置href,src,style样式等。

语法:v-bind:属性名="属性值" <img v-bind:src="item.image" width="30px">

简化::属性名="属性值" <img :src="item.image" width="30px">

注意:v-bind 所绑定的数据,必须在data中定义/或基于data中定义的数据而来。

2.3.3 v-if & v-show

**作用:**这两类指令,都是用来控制元素的显示与隐藏的

v-if:

  • 语法:v-if=“表达式”,表达式值为 true,显示;false,隐藏
  • 原理:基于条件判断,来控制创建或移除元素节点(条件渲染)
  • 场景:要么显示,要么不显示,不频繁切换的场景
  • 其它:可以配合 v-else-if / v-else 进行链式调用条件判断
   <!-- 基于v-if/v-else-if/v-else指令来展示职位这一列 -->
  <td>
    <span v-if="emp.job === '1'">班主任</span>
    <span v-else-if="emp.job === '2'">讲师</span>
    <span v-else-if="emp.job === '3'">学工主管</span>
    <span v-else-if="emp.job === '4'">教研主管</span>
    <span v-else-if="emp.job === '5'">咨询师</span>
    <span v-else>其他</span>
  </td>

v-show:

  • 语法:v-show=“表达式”,表达式值为 true,显示;false,隐藏
  • 原理:基于CSS样式display来控制显示与隐藏
  • 场景:频繁切换显示隐藏的场景

示例:

<!-- 基于v-show指令来展示职位这一列 -->
<td>
    <span v-show="emp.job === '1'">班主任</span>
    <span v-show="emp.job === '2'">讲师</span>
    <span v-show="emp.job === '3'">学工主管</span>
    <span v-show="emp.job === '4'">教研主管</span>
    <span v-show="emp.job === '5'">咨询师</span>
</td>
2.3.4 v-model
  • 作用:在表单元素上使用,双向数据绑定。可以方便的 获取设置 表单项数据
  • 语法:v-model="变量名"
  • 这里的双向数据绑定,是指 Vue中的数据变化,会影响视图中的数据展示 。 视图中的输入的数据变化,也会影响Vue的数据模型 。

在这里插入图片描述

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

2.3.5 v-on

作用:为html标签绑定事件(添加时间监听)

语法:

  • v-on:事件名="方法名"
  • 简写为 @事件名="…"
  • <input type="button" value="点我一下试试" v-on:click="handle">
  • <input type="button" value="点我一下试试" @click="handle">
2.4Vue的生命周期

vue的生命周期:指的是vue对象从创建到销毁的过程。

vue的生命周期包含8个阶段:每触发一个生命周期事件,会自动执行一个生命周期方法,这些生命周期方法也被称为钩子方法。其完整的生命周期如下图所示:

状态 阶段周期
beforeCreate 创建前
created 创建后
beforeMount 挂载前
mounted 挂载完成
beforeUpdate 更新前
updated 更新后
beforeDestroy 销毁前
destroyed 销毁后

3)Ajax

用来帮助前端从后端获取数据

作用:

  • 与服务器进行数据交换:通过Ajax可以给服务器发送请求,并获取服务器响应的数据。
  • 异步交互:可以在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页的技术,如:搜索联想、用户名是否可用的校验等等。
3.1同步异步

针对于上述Ajax的局部刷新功能是因为Ajax请求是异步的,与之对应的有同步请求。接下来我们介绍一下异步请求和同步请求的区别。

  • 同步请求发送过程如下图所示:

在这里插入图片描述

浏览器页面在发送请求给服务器,在服务器处理请求的过程中,浏览器页面不能做其他的操作。只能等到服务器响应结束后才能,浏览器页面才能继续做其他的操 作。

  • 异步请求发送过程如下图所示:

在这里插入图片描述

浏览器页面发送请求给服务器,在服务器处理请求的过程中,浏览器页面还可以做其他的操作。

3.2Axios

使用原生的Ajax请求的代码编写起来还是比较繁琐的,所以接下来我们学习一门更加简单的发送Ajax请求的技术Axios 。Axios是对原生的AJAX进行封装,简化书写

3.3入门程序

Axios的使用主要分为2步:

1). 引入Axios文件(如果网络不通畅,可以使用离线的已经下载好的js文件,资料中已经提供)

<script src="https://unpkg.com/axios/dist/axios.min.js"></script>

2). 点击按钮时,使用Axios发送请求

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Axios入门程序</title>
</head>
<body>

  <button id="getData">GET</button>
  <button id="postData">POST</button>
  
  <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
  <script>
    //GET请求
    document.querySelector('#getData').onclick = function() {
      axios({
        url:'https://mock.apifox.cn/m1/3083103-0-default/emps/list',
        method:'get'
      }).then(function(res) {
        console.log(res.data);
      }).catch(function(err) {
        console.log(err);
      })
    }
    
    //POST请求
    document.querySelector('#postData').onclick = function() {
      axios({
        url:'https://mock.apifox.cn/m1/3083103-0-default/emps/update',
        method:'post'
      }).then(function(res) {
        console.log(res.data);
      }).catch(function(err) {
        console.log(err);
      })
    }
  </script>
</body>
</html>
3.4请求方法别名

Axios还针对不同的请求,提供了别名方式的api,具体格式如下:

axios.请求方式(url [, data [, config]])

具体如下:

方法 描述
axios.get(url [, config]) 发送get请求
axios.delete(url [, config]) 发送delete请求
axios.post(url [, data[, config]]) 发送post请求
axios.put(url [, data[, config]]) 发送put请求

get请求代码改写成如下:

axios.get("https://mock.apifox.cn/m1/3083103-0-default/emps/list").then(result => {
    console.log(result.data);
})

post请求改写成如下:

axios.post("https://mock.apifox.cn/m1/3083103-0-default/emps/update","id=1").then(result => {
    console.log(result.data);
})

(笔记内容主要基于黑马程序员的课程讲解,旨在加深理解和便于日后复习)
在这里插入图片描述
希望这篇笔记能对大家的学习有所帮助,有啥不对的地方欢迎大佬们在评论区交流

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐