







引入Vue模块(官方提供) ①通过 import 从官方提供的 js 当中引入一个模块,就是 createApp 这样一个模块 ②模块化的js,需要我们在script 标签上声明一个属性 type = "moudle" 创建Vue程序的应用实例,控制视图的元素 ①通过导入进来的 createApp 这个函数。直接调用 createApp() 这个函数,并传递js对象{} ②控制视图的元素指的是 html 元素 准备元素 div 被Vue控制 ①<div id = "app"> </div> ②创建完 Vue 应用实例,需要调用 mount()方法。指定接管哪个区域。传入类似CSS选择器。mount("#app"); 指定 id为app 的 div 的这样区域。此时就可以在div中使用Vue提供的相关语法来渲染页面了


数据准备 外层大括号定义的是一个对象,里面定义了一个data方法。 data方法的返回值就是我们要定义的数据。 data中有个return,{}里面就放了js对象。这样对象定义了我们准备的数据。 通过插值表达式渲染页面 插值表达式就是 {{ }}

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Vue-快速入门</title>
</head>
<body>
<div id="app">
<h1>{{message}}</h1>
<h1>{{count}}</h1>
</div>
<script type="module">
import { createApp } from "https://unpkg.com/vue@3/dist/vue.esm-browser.js";
createApp({
data() {
return {
message: "Hello Vue",
count: 100,
};
},
}).mount("#app");
</script>
</body>
</html>






<tr v-for="(e, index) in empList" :key="e.id">
<td>{{index + 1}}</td> <!-- index代表索引默认从0开始 -->
<td>{{e.name}}</td>
<td>{{e.gender == 1?'男' : '女'}}</td>
<td>{{e.entrydate}}</td>
<td>{{e.updatetime}}</td>
<td class="action-buttons">
<button type="button">编辑</button>
<button type="button">删除</button>
</td>
</tr>注:下面的写法是错误的。 <!-- 插值表达式是不能出现在标签内部 --> 此时需要用到v-bind
<td><img class="avatar" v-bind:src="{{e.image}}" :alt="{{e.name}}"></td>例: 显示头像 根据职位对应的数字来显示对应的 具体职位
可以简写为:(冒号)



<td><img class="avatar" v-bind:src="e.image" :alt="e.name"></td>alt 属性 是如果 src 这个路径的图像找不到的话,就会生效 alt 这个属性。就会展示表述文字 故意填错试试:


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


<!-- 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: 控制元素的显示与隐藏 -->
<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-if:(控制元素是否真正渲染) 如果不满足条件,span标签就不会被渲染。

v-show:(控制元素展示还是隐藏) 不满足条件,span标签还是会被渲染。只是通过CSS的display属性设置为none。代表隐藏。


例:



双向数据绑定: 指的是,数据模型 和 我们的页面 绑定。 1.当我们数据模型数据发生变化。页面展示的内容跟着变化 2.页面内容变化了,数据模型绑定的数据也会跟着变化
searchForm:与empList:同级别
searchForm: {
//封装用户输入的查询条件
name: "",
gender: "",
job: "",
}, <!-- 搜索表单区域 -->
<form class="search-form"> <label for="name">姓名:</label>
<input
type="text"
id="name"
name="name"
v-model="searchForm.name"
placeholder="请输入姓名" <label for="gender">性别:</label>
<select id="gender" name="gender" v-model="searchForm.gender">
<option value=""></option>
<option value="1">男</option>
<option value="2">女</option>
</select> <label for="position">职位:</label>
<select id="position" name="position" v-model="searchForm.job">
<option value=""></option>
<option value="1">班主任</option>
<option value="2">讲师</option>
<option value="3">学工主管</option>
<option value="4">教研主管</option>
<option value="5">咨询师</option>
</select>
这样就能采集到用户输入的数据了。 基于v-model,我们将表单项的值,绑定到了我们的数据模型当中。 {{searchForm}}
极简插件官网_Chrome插件下载_Chrome浏览器应用商店
搜索vue

下载解压后, 将里面的CRX文件拖到
注意要打开开发者模式


通过这个Vue工具。我们找到了数据模型。修改数据模型,会发现页面也跟着变化了

<button type="button" v-on:click="search">查询</button>查询和清除需要我们创建一个方法。这个方法在vue中创建。与data数据平级。
//方法
methods: {
search() {
//将搜索条件, 输出到控制台
console.log(this.searchForm); //加this代表当前vue实例对象
},
clear() {
//清空表单项数据
this.searchForm = { name: "", gender: "", job: "" };
},
}, <button type="button" @click="clear">清空</button> methods: {
search() {
//将搜索条件, 输出到控制台
console.log(this.searchForm); //加this代表当前vue实例对象
},



如下输入后显示该邮箱地址已经被占用。这个就是异步交互。 还有上面输入java就自动提示词。这就是异步交互

异步:客户端发起请求,需要得到响应才能继续执行其他操作。 同步:客户端发起请求,客户端可以继续执行其他操作。

Axios






成功回调,失败回调都有了


会先输出②,也就是=============这一部分,因为 请求是需要一定的时间的。 而输出②会很快。 请求发出后,会继续往后执行

动态查询服务器端获取数据。



后面使用那两个关键字,就不需要 成功回调 和 失败回调 函数了。
点击查询:调用search方法

<script src="js/axios.js"></script>
<script type="module">
import { createApp } from 'https://unpkg.com/vue@3/dist/vue.esm-browser.js'
createApp({
data() {
return {
searchForm: { //封装用户输入的查询条件
name: '',
gender: '',
job: ''
},
empList: []
}
},
//方法
methods: {
async search(){
let result = await axios.get(`https://web-server.itheima.net/emps/list?name=${this.searchForm.name}&gender=${this.searchForm.gender}&job=${this.searchForm.job}`);
this.empList = result.data.data;
},
clear(){
//清空表单项数据
this.searchForm = {name:'', gender:'', job:''}
this.search()
}
},
}).mount('#container')可以通过 async 、await 可以让异步变成同步操作。 async 就是来声明一个异步方法。。 await 是用来等待异步任务的执行。等待服务器响应了再继续往下执行。有了await之后就不用再写成功回调函数了。因为影响成功才会往下执行。






生命周期-钩子函数 声明钩子函数,与data()平齐
//钩子函数
mounted(){
//页面加载完成之后,发送ajax请求,获取数据
this.search()
}