Vue-cli&ElementUI
1、Vue-cli
1.1、什么是Vue-cli
- Vue cli是基于Vue的应用开发提供的一个标准的脚手架工具.为应用搭建基础的框架结构,提供插件、开发服务、Preset、构建打包功能
- Vue cli 背后集成了现代化开发的诸多功能,通过简单的命令就可以完成 "零配置"的项目环境搭建
1.2、 安装Vue-cli步骤
在安装vue-cli前,要确认自己的电脑是否安装了nodejs和npm
1.2.1、安装Node.js
详情参考
- https://blog.csdn.net/weixin_52487106/article/details/128721225?spm=1001.2014.3001.5501
- https://blog.csdn.net/antma/article/details/86104068
1.2.2、安装vue-ui
目前主流版本是 2.x 和 3.x 版本,安装3.x 以上的版本是因为该版本既可以创建2.x项目与3.x 项目
注意: 以管理员身份打开命令行
- 安装命令
npm install -g @vue/cli
- 输入 vue命令
- 输入 vue -V 查看版本
vue -V
1.3、快速构建Vue项目
1.3.1、步骤说明
我们使用vue-cli 快速构建项目,步骤如下:
- 桌面创建一个空的文件夹
- 以管理员身份运行cmd , 进入到vueTest文件夹
- 执行下面的命令
1.基于交互式命令方式,创建项目
//文件名 不支持驼峰(含大写字母)使用短横线方式
vue create my-project
- 选择自定义安装,点击回车
- 在这列表中,选择我们要安装的组件,使用空格键选择,选好后回车
- 按回车之后,提示选择什么模式的路由,我们输入 n (表示选择hash模式)
- 选择项目配置文件单独存放
- 是否保存模板,选择n 不创建
- 安装完成,提示输入执行下面这两个命令
- 首先进入项目目录
cd my-project
- 启动项目
npm run serve
-
访问项目: http://localhost:8080/
-
停止项目只要,关闭命令行窗口即可
1.3.2、 导入Vue项目到VSCode
- VSCode中右键选择打开文件夹
- 选择桌面上的项目
- 打开项目,可以看到如下项目结构
1.3.3、项目结构介绍
|--- my-project 项目名称
|--- node_modules 存放依赖包的目录
|--- public 静态资源管理目录
|--- src 组件源码目录(我们写的代码)
|--- assets 存放静态图片资源(CSS也可以放在这里)
|--- components 存放各种组件(一个页面可以看做一个组件),各个组件联系在一起组成一个完整的项目
|--- router 存放了项目路由文件
|--- views 放置的为公共组件(主要还是各个主要页面)
|--- App.vue app.vue可以当做是网站首页,是一个vue项目的主组件,页面入口文件
|--- main.js 打包运行的入口文件,引入了vue模块和app.vue组件以及路由route
|--- babel.config.js babel配置文件, 对源代码进行转码(把es6=>es5)
|--- package.json 项目及工具的依赖配置文件
|--- paxkage-lock.json 依赖配置文件
|--- README.md 项目说明
1.3.4、Vue脚手架自定义配置
每个项目的根目录下面,一般都有一个 package.json 文件,定义了这个项目所需要的各种模块,以及项目的配置信息(比如名称、版本、许可证等元数据)。 npm install 命令根据这个配置文件,自动下载所需的模块,也就是配置项目所需的运行和开发环境。
{
"name": "my-project",
"version": "0.1.0",
"private": true,
"scripts": {
"serve": "vue-cli-service serve",
"build": "vue-cli-service build"
},
"dependencies": {
"core-js": "^3.8.3",
"vue": "^2.6.14",
"vue-router": "^3.5.1"
},
"devDependencies": {
"@vue/cli-plugin-babel": "~5.0.0",
"@vue/cli-plugin-router": "~5.0.0",
"@vue/cli-service": "~5.0.0",
"vue-template-compiler": "^2.6.14"
}
}
这里要在vue.config.js多加一个自定义配置:端口号
如果你没有这个vue.config.js文件的话就在package.json中去配置
vue.config.js
devServer:{
port: 8888,
}
package.json
"vue":{
"devServer":{
"port": "8888"
}
}
这里推荐使用vue.config.js去配置vue的自定义的配置,如果没有的话可以自己创建一个
module.exports = {
devServer:{
port: 8888
}
}
1.3.5、Vue组件化开发
-
组件化是Vue的精髓,Vue项目就是由一个一个的组件构成的。 我们主要的工作就是开发的组件
-
我们用 vue-cli 脚手架搭建的项目,里面有很多,如 index.vue 或者 App.vue 这一类的文件.每一个*.vue 文件都是一个组件 ,是一个自定义的文件类型, 比如 App.vue 就是整个项目的根组件。
-
常见的组件:
- 页面级别的组件
- 页面级别的组件,通常是 views 目录下的.vue组件,是组成整个项目的各个主要页面
- 业务上可复用的基础组件
- 这一类组件通常是在业务中被各个页面复用的组件,这一类组件通常都写到 components 目录下,然后通过import在各个页面中使用
- 页面级别的组件
-
组件的组成部分
- template : 组件的HTML部分
- script: 组件的JS脚本 (使用ES6语法编写)
- style: 组件的CSS样式
<!-- 1.template 代表html结构, template中的内容必须有且只有一个根元素
编写页面静态部分 就是 view部分 -->
<template>
<div>
测试页面....
</div>
</template>
<!-- 2.编写vue.js代码 -->
<script>
// 可以导入其组件
// import Header from '../components/header.vue'
// 默认写法,输出该组件
export default {
// 组件名称,用于以后路由跳转
name: "Home",
// 当前组件中需要使用的数据
data(){
return {}
},
methods: {}
}
</script>
<!-- 编写当前组件的样式代码 -->
<style scoped>
/* 页面样式 加上scoped 表示样式就只能在当前组件有效 */
</style>
1.4、项目运行流程
1.4.1、main.js
// 1、项目运行会加载 入口文件main.js
// 在vue中使用import 变量名 from 文件路径
import Vue from 'vue'
import App from './App.vue' // 主组件
import router from './router' // 路由
// 关闭启动提示
Vue.config.productionTip = false
// 创建Vue实例
new Vue({
router, // 为整个项目 添加路由
render: h => h(App) // 生成模板 App - App.vue
}).$mount('#app') // 挂载了App.vue中id为App的区域
1.4.2、App.vue
// 2、App.vue 是项目的主组件(整个项目的其他页面都是主组件中切换)
// 它是App.vue中html代码部分
<template>
<!-- 挂载的区域 -->
<div id="app">
<nav>
<!-- 路由的导航链接 -->
<router-link to="/">Home</router-link> |
<router-link to="/about">About</router-link>
</nav>
<router-view/>
</div>
</template>
<style>
#app {
font-family: Avenir, Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-align: center;
color: #2c3e50;
}
nav {
padding: 30px;
}
nav a {
font-weight: bold;
color: #2c3e50;
}
nav a.router-link-exact-active {
color: #42b983;
}
</style>
1.4.3、路由
// 3、查看路由文件的具体配置
// 引入所需文件
import Vue from 'vue'
import VueRouter from 'vue-router'
// 引入了Home.vue组件
import HomeView from '../views/HomeView.vue'
// 使用了路由功能
Vue.use(VueRouter)
// 创建路由集合,元素就是一个一个的路由规则
const routes = [
{
path: '/', // 路径
name: 'home',// 路径名称
component: HomeView // 表示路由导航到的组件
},
{
path: '/about',
name: 'about',
// route level code-splitting
// this generates a separate chunk (about.[hash].js) for this route
// which is lazy-loaded when the route is visited.
component: () => import(/* webpackChunkName: "about" */ '../views/AboutView.vue')
}
]
// 创建路由管理器对象
const router = new VueRouter({
routes
})
// 用来表示导出模块
export default router
1.4.4、Home.vue
// 4、查看默认访问的Home.vue
// 视图部分
<template>
<div class="home">
<img alt="Vue logo" src="../assets/logo.png">
<HelloWorld msg="Welcome to Your Vue.js App"/>
</div>
</template>
<script>
// @ is an alias to /src
// @符号表示 src这个目录
import HelloWorld from '@/components/HelloWorld.vue'
export default {
name: 'HomeView',
components: {
HelloWorld
}
}
</script>
1.4.5、HelloWorld.vue
<template>
<div class="hello">
<h1>{{ msg }}</h1>
<p>
For a guide and recipes on how to configure / customize this project,<br>
check out the
<a href="https://cli.vuejs.org" target="_blank" rel="noopener">vue-cli documentation</a>.
</p>
<h3>Installed CLI Plugins</h3>
<ul>
<li><a href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-babel" target="_blank" rel="noopener">babel</a></li>
<li><a href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-router" target="_blank" rel="noopener">router</a></li>
</ul>
<h3>Essential Links</h3>
<ul>
<li><a href="https://vuejs.org" target="_blank" rel="noopener">Core Docs</a></li>
<li><a href="https://forum.vuejs.org" target="_blank" rel="noopener">Forum</a></li>
<li><a href="https://chat.vuejs.org" target="_blank" rel="noopener">Community Chat</a></li>
<li><a href="https://twitter.com/vuejs" target="_blank" rel="noopener">Twitter</a></li>
<li><a href="https://news.vuejs.org" target="_blank" rel="noopener">News</a></li>
</ul>
<h3>Ecosystem</h3>
<ul>
<li><a href="https://router.vuejs.org" target="_blank" rel="noopener">vue-router</a></li>
<li><a href="https://vuex.vuejs.org" target="_blank" rel="noopener">vuex</a></li>
<li><a href="https://github.com/vuejs/vue-devtools#vue-devtools" target="_blank" rel="noopener">vue-devtools</a></li>
<li><a href="https://vue-loader.vuejs.org" target="_blank" rel="noopener">vue-loader</a></li>
<li><a href="https://github.com/vuejs/awesome-vue" target="_blank" rel="noopener">awesome-vue</a></li>
</ul>
</div>
</template>
<script>
export default {
name: 'HelloWorld',
props: {
msg: String
}
}
</script>
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
h3 {
margin: 40px 0 0;
}
ul {
list-style-type: none;
padding: 0;
}
li {
display: inline-block;
margin: 0 10px;
}
a {
color: #42b983;
}
</style>
1.5、组件的使用案例
1.5.1、自定义组件
自定义一个组件,然后将本身vue中的helloworld组件替换成它
<template>
<div class="header">
{{ msg }}
</div>
</template>
<script>
// js部分的代码
export default {
name:"Header", // 组件名称
data(){ // data函数
return {
msg:"这是一个Header组件"
}
}
}
</script>
<style scoped>
.header{
height: 100px;
line-height: 100px;
background-color: #eee;
text-align: center;
color:red;
}
</style>
1.5.2、组件的传参
参考文章:https://blog.csdn.net/weixin_52487106/article/details/128764077
2、Element-UI
2.1、Element-UI介绍
element-ui 是饿了么前端出品的基于 Vue.js的 后台组件库,方便程序员进行页面快速布局和构建
Element-UI官方站点:https://element.eleme.cn/#/zh-CN
2.2、Element-UI使用
- 安装
- 当前项目下打开终端, 安装依赖包 ,执行下面的命令
npm i element-ui -S
- 打开 main.js , 导入Element-UI 相关资源.
- main.js是工程的入口文件,在此文件中加载了很多第三方组件,如:Element-UI、Base64、VueRouter等。
//导入组件库
import ElementUI from 'element-ui'
//导入组件相关样式
import 'element-ui/lib/theme-chalk/index.css'
//配置Vue插件 将El安装到Vue上
Vue.use(ElementUI);
- 复制Element 按钮样式 到app.vue文件的 template下
<template>
<div id="app">
<nav>
<el-row>
<el-button>默认按钮</el-button>
<el-button type="primary">主要按钮</el-button>
<el-button type="success">成功按钮</el-button>
<el-button type="info">信息按钮</el-button>
<el-button type="warning">警告按钮</el-button>
<el-button type="danger">危险按钮</el-button>
</el-row>
<router-link to="/">Home</router-link> |
<router-link to="/about">About</router-link>
</nav>
<router-view/>
</div>
</template>
- 启动项目
2.3、CLI工程改造
- 删除components下的文件
- App.vue
<template>
<div id="app"></div>
</template>
<style>
</style>
- router文件夹下的index.js保留
import Vue from 'vue'
import VueRouter from 'vue-router'
Vue.use(VueRouter)
const routes = [
]
const router = new VueRouter({
routes
})
export default router
- 清空views
- 安装axios
- 安装命令
npm i axios
- 在main.js中导入axios相关资源
//引入axios
import axios from 'axios'
//Vue对象使用axios
Vue.prototype.axios = axios;
2.4、用户登录界面制作
2.4.1、Dialog对话框组件
我们可以用Dialog制作一个登陆弹窗,选择自定义内容
- Login.vue
<template>
<div id="login">
<el-dialog :show-close="false" title="用户登录" :visible.sync="dialogFormVisible">
<el-form>
<el-form-item label="账号" :label-width="formLabelWidth">
<el-input autocomplete="off"></el-input>
</el-form-item>
<el-form-item label="密码" :label-width="formLabelWidth">
<el-input autocomplete="off"></el-input>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="dialogFormVisible = false">登 录</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
export default {
data() {
return {
dialogFormVisible: true,
formLabelWidth: '120px'
};
}
}
</script>
<style scoped>
</style>
- 配置路由
import Vue from 'vue'
import VueRouter from 'vue-router'
import Login from '@/components/Login'
Vue.use(VueRouter)
const routes = [
// 访问/ 也跳转到login
{
path: "/",
redirect: "login" // 重定向
},
// 登录路由
{
path: "/login",
name: "login",
component: Login
}
]
const router = new VueRouter({
mode: 'history',
routes
})
export default router
- App.vue
<template>
<div id="app">
<!-- 根据访问路径,渲染路径匹配到的组件 -->
<router-view>
</router-view>
</div>
</template>
<style>
</style>
2.4.2、登录功能编写
<template>
<div id="login">
<el-dialog :show-close="false" title="用户登录" :visible.sync="dialogFormVisible">
<el-form>
<el-form-item label="账号" :label-width="formLabelWidth">
<el-input v-model="user.username" autocomplete="off"></el-input>
</el-form-item>
<el-form-item label="密码" :label-width="formLabelWidth">
<el-input v-model="user.password" autocomplete="off"></el-input>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="login">登 录</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import axios from 'axios';
export default {
data() {
return {
dialogFormVisible: true,
formLabelWidth: '120px',
user:{
username: "",
password: ""
}
};
},
methods:{
// 登录的方法
login(){
// 定义常量保存url
var url = "https://2105bb20-e273-4b30-9565-d7208ae7bef6.mock.pstmn.io/login";
this.axios.get(url, {
// 携带参数
params:{
username: this.user.username,
password: this.user.password
4. },
}).then((res) => {
console.log(res);
this.dialogFormVisible = false;
}).catch((error) => {
// 出现错误使用ElementUI提供的消息提示
this.$message.error("对不起!登录错误!");
})
}
}
}
</script>
<style scoped>
</style>
axios案例:http://axios-js.com/zh-cn/docs/index.html
这里没有使用setup那个东西,数据都是在data()中直接用return返回回去的,没有使用哪些ref啥的东西,还有这个axios我觉得比jquery还复杂点,但是不知道在速度上怎么样,后来搜了搜,怎么感觉jquery有点老了,感觉还是用axios比较好
https://segmentfault.com/a/1190000012836882
2.4.3、搭建虚拟服务器测试
- Mock server就是模拟一个服务器,我们使用Mock server可以模拟后台接口,对请求进行响应
- 在前后端分离的开发中 前端利用mockeserver模拟出对应接口,拿到返回数据来调试,无需等后端开发人员完成工作。
- 使用postman模拟出一个server
- 打开如下窗体,创建一个伪服务
- 修改请求的URL
小知识
- postman可以测试接口,又可以当后端用,很神奇
- 这个是刚知道的如果axios的回调函数使用function的方式写的话,回调函数内部访问不了this这个关键字,此时就需要在methods中var that = this;然后通过that访问属性,但是如果使用es6的箭头函数的话就可以在回调函数内部使用
2.4.4、前端页面跳转
https://v3.router.vuejs.org/zh/guide/essentials/navigation.html
在 Vue 实例内部,你可以通过 $router 访问路由实例。因此你可以调用 this.$router.push来进行跳转(也就是编程式的导航)
methods:{
// 登录的方法
login(){
// 定义常量保存url
var url = "https://2105bb20-e273-4b30-9565-d7208ae7bef6.mock.pstmn.io/login";
this.axios.get(url, {
// 携带参数
params:{
username: this.user.username,
password: this.user.password
},
}).then((res) => {
console.log(res);
// 成功后关闭对话框
this.dialogFormVisible = false;
// 进行页面跳转,跳转到首页,在前端进行页面跳转必须要使用路由
this.$router.push("index");
}).catch((error) => {
// 出现错误使用ElementUI提供的消息提示
this.$message.error("对不起!登录失败!");
})
}
}
2.5、首页布局页面制作
2.5.1、创建 index.vue
<template>
<el-button type="danger">布局页面</el-button>
</template>
<script>
export default {
}
</script>
<style scoped>
</style>
2.5.2、配置路由
router目录下 的index.js 路由文件
import Index from '@/components/Index'
{
path: "/index",
name: "index",
component: Index
},
2.5.3、布局容器和导航菜单
<template>
<div class="index">
<el-container style="height: 100%" direction="vertical">
<el-header>后台管理</el-header>
<el-container>
<el-aside width="200px">
<el-menu
default-active="2"
class="el-menu-vertical-demo"
background-color="#D3DCE6">
<el-submenu index="1">
<template slot="title">
<i class="el-icon-location"></i>
<span>导航菜单</span>
</template>
<el-menu-item-group>
<el-menu-item index="1-1"><i class="el-icon-menu"></i>课程管理</el-menu-item>
</el-menu-item-group>
</el-submenu>
</el-menu>
</el-aside>
<el-main>Main</el-main>
</el-container>
</el-container>
</div>
</template>
<script>
export default {
}
</script>
<style>
html,
body,
#app,
.index,
.el-container{
padding: 0px;
margin: 0px;
height: 100%;
}
.el-header, .el-footer {
background-color: #B3C0D1;
color: #333;
text-align: center;
line-height: 60px;
}
.el-aside {
background-color: #D3DCE6;
color: #333;
text-align: center;
line-height: 200px;
}
.el-main {
background-color: #E9EEF3;
color: #333;
text-align: center;
line-height: 160px;
}
</style>
`知识点``
- 就像是bootstrap一样都是抄过来然后修改,然后有不同的class啥的一些配置可以使用不同的样式
- 这里我用了官网的抄下来的代码,发现容器布局不能全屏显示,然后参考了
https://blog.csdn.net/qq_36275889/article/details/94634397解决了问题
2.5.4、导航菜单的嵌套路由设置
这里使用了嵌套路由(子路由)
2.6、课程列表展示
2.6.1、Table表格组件的使用
Course.vue
<template>
<div class="course">
<el-table :data="tableData" stripe style="width: 100%">
<el-table-column prop="date" label="日期" width="180"></el-table-column>
<el-table-column prop="name" label="姓名" width="180"></el-table-column>
<el-table-column prop="address" label="地址"></el-table-column>
</el-table>
</div>
</template>
<script>
export default {
data() {
return {
tableData: [{
date: '2016-05-02',
name: '王小虎',
address: '上海市普陀区金沙江路 1518 弄'
}]
}
}
}
</script>
<style scoped>
</style>
2.6.2、Course组件开发
<template>
<div class="course" >
<el-table v-loading="loading" element-loading-text="玩命加载中..." :data="courseList" stripe style="width: 100%">
<el-table-column prop="id" label="ID" ></el-table-column>
<el-table-column prop="course_name" label="课程名称" ></el-table-column>
<el-table-column prop="price" label="价格"></el-table-column>
<el-table-column prop="sort_num" label="排序"></el-table-column>
<el-table-column prop="status" label="状态"></el-table-column>
</el-table>
</div>
</template>
<script>
export default {
data() {
return {
courseList: [
{
id: 1,
course_name: "java",
price: 888,
sort_num: 1,
status: "下架"
}],
loading: true
}
},
// 钩子函数created,在DOM页面生成之前执行
created(){
this.loadCourse();
},
methods:{
// 方法1:获取课程信息
loadCourse(){
alert("loadCourse方法执行了");
// 发送请求获取课程信息
// 取消加载动画
this.loading = false;
}
}
}
</script>
<style scoped>
</style>
- 所需的字段写好,然后对应取值的prop写好
- 先测试,造一份假数据
- 做一个加载动画,使用钩子函数created,调用加载数据的方法,然后加载完后将加载动画取消即可
2.6.3、请求后台接口
<script>
import axios from 'axios';
export default {
data() {
return {
courseList: [],
loading: true
}
},
// 钩子函数created,在DOM页面生成之前执行
created(){
this.loadCourse();
},
methods:{
// 方法1:获取课程信息
loadCourse(){
// 发送请求获取课程信息
const url = "http://localhost:8082/lagou_edu_home/course";
return this.axios.get(url,{
params:{
methodName: "findCourseList",
}
}).then((resp) => {
console.log(resp);
// 取消加载动画
this.loading = false;
}).catch((error) => {
this.$message.error("获取数据失败!");
})
}
}
}
</script>
注意点
:
- 如果不清楚成功的回调函数传回来的值是什么的话,先打印出来看看
- 这个axios请求最后一定要return都返回出来,才能被\template中使用
- 最后要处理跨域问题
2.6.4、跨域问题解决
-
当我们在前端项目中,向后端发送请求的获取课程数据的时候,出现了跨域问题
-
已被CORS策略阻止:请求的资源上没有’ Access-Control-Allow-Origin’标头(跨域请求失败)
-
什么是跨域
跨域是指通过JS在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,只要协议、域名、端口有任何一个不同,都被当作是不同的域,浏览器就不允许跨域请求。 -
如何解决
跨域的允许主要由服务器端控制。服务器端通过在响应的 header 中设置 Access-Control-AllowOrigin 及相关一系列参数,提供跨域访问的允许策略 -
设置响应头中的参数来允许跨域域请求:
- Access-Control-Allow-Credentials
- Access-Control-Allow-Origin 标识允许跨域的请求有哪些
- 在pom文件中引入依赖
<!-- 解决跨域问题所需依赖 -->
<dependency>
<groupId>com.thetransactioncompany</groupId>
<artifactId>cors-filter</artifactId>
<version>2.5</version>
</dependency>
- 在web.xml中 配置跨域 filter
<!--配置跨域过滤器-->
<filter>
<filter-name>corsFilter</filter-name>
<filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>corsFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
- 然后就可以看到数据了
2.7、条件查询
2.7.1、ElementUI输入框组件
<el-row :gutter="20">
<el-col :span="6">
<el-input placeholder="课程名称" v-model="courseMethod" prefix-icon="el-icon-search" clearable> </el-input>
</el-col>
<el-col :span="1">
<el-button type="primary">点击查询</el-button>
</el-col>
</el-row>
- bootstrap是布局栅格是12格子,这个ElementUI是24个格子神奇!
2.7.2、请求后台数据
<template>
<div class="course">
<el-row :gutter="20">
<el-col :span="6">
<el-input placeholder="课程名称" v-model="filter.course_name" prefix-icon="el-icon-search" clearable> </el-input>
</el-col>
<el-col :span="6">
<el-input placeholder="课程状态" v-model="filter.status" prefix-icon="el-icon-search" clearable> </el-input>
</el-col>
<el-col :span="1">
<el-button type="primary" @click="findByCourseName">点击查询</el-button>
</el-col>
</el-row>
<el-table
v-loading="loading"
element-loading-text="玩命加载中..."
:data="courseList"
stripe
style="width: 100%"
>
<el-table-column prop="id" label="ID"></el-table-column>
<el-table-column prop="course_name" label="课程名称"></el-table-column>
<el-table-column prop="price" label="价格"></el-table-column>
<el-table-column prop="sort_num" label="排序"></el-table-column>
<el-table-column prop="status" label="状态"></el-table-column>
</el-table>
</div>
</template>
<script>
import axios from "axios";
export default {
data() {
return {
courseList: [],
loading: true,
filter:{
course_name: "",
status: null
}
};
},
// 钩子函数created,在DOM页面生成之前执行
created() {
this.loadCourse();
},
methods: {
// 方法1:获取课程信息
loadCourse() {
// 发送请求获取课程信息
const url = "http://localhost:8082/lagou_edu_home/course";
return this.axios
.get(url, {
params: {
methodName: "findCourseList",
},
})
.then((resp) => {
console.log(resp.data);
this.courseList = resp.data;
// 取消加载动画
this.loading = false;
})
.catch((error) => {
this.$message.error("获取数据失败!");
});
},
// 方法2:根据课程名称查询课程信息
findByCourseName(){
const url = "http://localhost:8082/lagou_edu_home/course";
this.axios.get(url,{
params:{
methodName: "findByCourseNameAndStatus",
course_name: this.filter.course_name,
status: this.filter.status
}
}).then((resp) => {
console.log(resp.data);
this.courseList = resp.data;
}).catch((error) => {
this.$message.error("获取数据失败!");
})
}
},
};
</script>
<style scoped>
</style>
- 我给加上了课程状态的输入框
- 记得开启加载提示,好看些!