当前位置:   article > 正文

Vue实战--笔记_vue 一个接口发起多次请求。怎么判断是在哪

vue 一个接口发起多次请求。怎么判断是在哪

1. 配置数据请求接口

1.1 main.js内定义接口路径

// 配置请求的根路径
axios.defaults.baseURL = 'http://127.0.0.1:8888/api/private/v1
  • 1
  • 2

1.2 从接口里请求数据

// 使用get方法需要有第二个参数
async getUserList() {
	const {data: res} = await this.$http.get('users', { params: this.queryInfo})
        if (res.meta.status !== 200) {
          return this.$message.error('获取用户列表失败!')
        }
        this.userlist = res.data.users
        this.total = res.data.total
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

1.3 请求方法

  • GET(SELECT):从服务器取出资源(一项或多项)。
  • POST(CREATE):在服务器新建一个资源。
  • PUT(UPDATE):在服务器更新资源(客户端提供改变后的完整资源)。
  • PATCH(UPDATE):在服务器更新资源(客户端提供改变的属性)。
  • DELETE(DELETE):从服务器删除资源。
  • HEAD:获取资源的元数据。
  • OPTIONS:获取信息,关于资源的哪些属性是客户端可以改变的。

2. 路由

2.1 导航守卫

router.beforeEach((to, from, next) => {
  // to 将要访问的路径
  // from 代表从那个路径跳转而来
  // next 是一个函数,表示放行
  //   next() 放行 next('/login') 强制跳转

  if (to.path === '/login') return next();
  // 获取token
  const tokenStr = window.sessionStorage.getItem('token')
  if (!tokenStr) return next('/login')
  next()
})
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

2. Form表单

> 栗子:添加
// :model => 定义添加用户的模板
// :rules => 指定表单验证规则
	<el-form :model="addForm" :rules="addFormRules" ref="addUserFormRef" label-width="70px">
// prop => 写入到预先定义的添加模板,在:model内定义
        <el-form-item label="用户名" prop="username">
          <el-input v-model="addForm.username"></el-input>
        </el-form-item>
        <el-form-item label="密码" prop="password">
          <el-input v-model="addForm.password"></el-input>
        </el-form-item>
        <el-form-item label="邮箱" prop="email">
          <el-input v-model="addForm.email"></el-input>
        </el-form-item>
        <el-form-item label="手机" prop="mobile">
          <el-input v-model="addForm.mobile"></el-input>
        </el-form-item>
     </el-form>
// 定义添加模板如下
//	addForm: {
//    username: '',
//    password: '',
//    email: '',
//    mobile: ''
//	}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
> 栗子:修改
// 修改与添加不同的地方在于:model绑定的对象为一个空对象
// 其余地方基本相同
	<el-form :model="editForm" :rules="editFormRules" ref="editUserFormRef" label-width="70px">
        <el-form-item label="用户名">
          <el-input v-model="editForm.username" disabled></el-input>
        </el-form-item>
        <el-form-item label="邮箱" prop="email">
          <el-input v-model="editForm.email"></el-input>
        </el-form-item>
        <el-form-item label="手机" prop="mobile">
          <el-input v-model="editForm.mobile"></el-input>
        </el-form-item>
      </el-form>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

3. github

3.1 联系GitHub

$ git clone 仓库地址

3.2 查看状态

$ git status

3.3 加载资源

$ git add .

3.4 初始化项目(提交到本地)

$ git commit -m ‘初始化项目’

3.5 提交到服务器

$ git push

3.6 创建一个新的分支

$ git checkout -b 分支名

3.7 切换分支

$ git checkout 分支名

3.8 查看当前分支

$ git branch

3.9 推送新的分支到仓库保存

$ git push -u origin 保存的分支名

3.10合并分支(先切换到主分支再合并)

$ git merge 需要合并的分支名

4. 请求时需要注意的地方

4.1 关闭对话框重置书对话框保留的内容

// 通过ref找到要重置的form表单,调用 resetFields() 方法
this.$refs.addCateFormRef.resetFields()
  • 1
  • 2

5. 不了解的方法

split()	// 该方法用于把一个字符串分割成字符串数组
resetFields() // 该方法可用于关闭对话框时重置对话框信息

$nextTick() // $nextTick方法的作用,就是当页面上元素被重新渲染之后,才会指定回调函数中的代码
this.$refs.saveTagInput.$refs.input.focus() // 在$nextTick方法内调用可以让切换出来的输入框获得焦点

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

6. 基本功能

6.1 获取数据列表

// html

	<el-table :data="userlist" border stripe>
        <el-table-column label="#" type="index"></el-table-column>
        <el-table-column label="姓名" prop="username"></el-table-column>
        <el-table-column label="邮箱" prop="email"></el-table-column>
        <el-table-column label="电话" prop="mobile"></el-table-column>
        <el-table-column label="角色" prop="role_name"></el-table-column>
        <el-table-column label="状态" width="150px">
          <template v-slot="scope">
            <el-switch v-model="scope.row.mg_state" @change="userStateChanged(scope.row)">
            </el-switch>
          </template>
        </el-table-column>
        <el-table-column label="操作" width="180px">
          <template v-slot="scope">
<!--            修改按钮-->
            <el-button type="primary" icon="el-icon-edit" size="mini" @click="showEditDialog(scope.row.id)"></el-button>
<!--            删除按钮-->
            <el-button type="danger" icon="el-icon-delete" size="mini" @click="removeUserById(scope.row.id)"></el-button>
<!--            分配角色按钮-->
            <el-tooltip effect="dark" content="分配角色" placement="top" :enterable="false">
              <el-button type="warning" icon="el-icon-setting" size="mini" @click="setRole(scope.row)"></el-button>
            </el-tooltip>
          </template>
        </el-table-column>
      </el-table>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

js

// data 
	userlist: []
// js
	async getUserList() {
        const {data: res} = await this.$http.get('users', { params: this.queryInfo})
        if (res.meta.status !== 200) {
          return this.$message.error('获取用户列表失败!')
        }
        this.userlist = res.data.users
        this.total = res.data.total
      },
      // 监听pagesize改变的事件
      handleSizeChange(newSize) {
        this.queryInfo.pagesize = newSize
        this.getUserList()
      }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

6.2 分页

// html
<el-pagination
	@size-change="handleSizeChange"
	@current-change="handleCurrentChange"
    :current-page="queryInfo.pagenum"
    :page-sizes="[5, 10, 15]"
    :page-size="queryInfo.pagesize"
    layout="total, sizes, prev, pager, next, jumper"
    :total="total"
    background>
</el-pagination>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
// data
queryInfo: {
          query: '',
          pagenum: 1,
          pagesize: 5
        },
        total: 0,
        orderList: []
        
// js
handleSizeChange(newSize) {
        this.queryInfo.pagesize = newSize
        this.getOrderList()
      },
      handleCurrentChange(newPage) {
        this.queryInfo.pagenum = newPage
        this.getOrderList()
      }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

6.3 列表搜索功能

// html
    <el-input placeholder="请输入内容" v-model="queryInfo.query" clearable @clear="getUserList">
        <el-button slot="append" icon="el-icon-search" @click="getUserList"></el-button>
    </el-input>
  • 1
  • 2
  • 3
  • 4
// data
	queryInfo: {
          query: '',
          pagenum: 1,
          pagesize: 2
        },
// js
    async getUserList() {
        const {data: res} = await this.$http.get('users', { params: this.queryInfo})
        if (res.meta.status !== 200) {
        return this.$message.error('获取用户列表失败!')
    }
        this.userlist = res.data.users
        this.total = res.data.total
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

6.4 编辑对话框

// 对话框html  按钮添加 @click 单击事件,将 editDialogVisible 改为true达到展示的效果
	<el-dialog
            title="修改用户"
            :visible.sync="editDialogVisible"
            width="50%" @close="editDialogClosed">
      <el-form :model="editForm" :rules="editFormRules" ref="editUserFormRef" label-width="70px">
        <el-form-item label="用户名">
          <el-input v-model="editForm.username" disabled></el-input>
        </el-form-item>
        <el-form-item label="邮箱" prop="email">
          <el-input v-model="editForm.email"></el-input>
        </el-form-item>
        <el-form-item label="手机" prop="mobile">
          <el-input v-model="editForm.mobile"></el-input>
        </el-form-item>
      </el-form>
      <span slot="footer" class="dialog-footer">
        <el-button @click="editDialogVisible = false">取 消</el-button>
        <el-button type="primary" @click="editUserInfo">确 定</el-button>
      </span>
    </el-dialog>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
// data
	editForm: {}  // 用户信息对象
	// 表单验证
	editFormRules: {
          email: [
            {required: true, message: '请输入密码', trigger: 'blur'},
            {validator: checkEmail, trigger: 'blur'}
          ],
          mobile: [
            {required: true, message: '请输入手机号码', trigger: 'blur'},
            {validator: checkMobile, trigger: 'blur'}
          ]
        }
// js
	async showEditDialog(id) {
        // console.log(id);
        const {data: res} = await this.$http.get('users/' + id)   // get方法获取数据

        if (res.meta.status !== 200) {
          return this.$message.error('查询用户信息失败!')
        }
        this.editForm = res.data
        this.editDialogVisible = true   // 将对话框修改未true显示
      }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

6.5 修改用户信息提交

editUserInfo() {
        this.$refs.editUserFormRef.validate(async vaild => {    // 提交前调用 validate 方法预验证表单
          if (!vaild) return
          // 发起修改用户信息的数据请求
          const {data: res} = await this.$http.put('users/' + this.editForm.id, this.editForm)
          if (res.meta.status !== 200) {
            this.$message.error('修改用户信息失败!')
          }
          this.$message.success('修改用户信息成功!')
          this.editDialogVisible = false
          this.getUserList()
        })
      },
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

6.5 删除事件

// html
	// 按钮添加 @click 调用删除方法
  • 1
  • 2
// js
	async removeUserById(id) {
        const confirmResult = await this.$confirm('此操作将永久删除该用户, 是否继续?', '提示',
            {
              confirmButtonText: '确定',
              cancelButtonText: '取消',
              type: 'warning'
            }
        ).catch(err => err)
        console.log(id);
        // 如果用户确认删除, 则返回值为字符串 confirm
        // 如果用户取消了删除,则返回值为字符串 cancel
        if (confirmResult !== 'confirm') {
          return this.$message.info('已取消删除!')
        }
        const {data: res} = await this.$http.delete('users/' + id)
        if (res.meta.status !== 200) {
          this.$message.error('删除用户失败!')
        } else if (res.meta.status == 200) {
        this.$message.success('删除用户成功!')
        }
        this.getUserList()
      }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

6.6 添加事件

// html
<!--      添加对话框-->
    <el-dialog
            title="添加用户"
            :visible.sync="addUserDialogVisible"
            width="50%" @close="addDialogClosed">
<!--      内容主题区域-->
      <el-form :model="addForm" :rules="addFormRules" ref="addUserFormRef" label-width="70px">
        <el-form-item label="用户名" prop="username">
          <el-input v-model="addForm.username"></el-input>
        </el-form-item>
        <el-form-item label="密码" prop="password">
          <el-input v-model="addForm.password"></el-input>
        </el-form-item>
        <el-form-item label="邮箱" prop="email">
          <el-input v-model="addForm.email"></el-input>
        </el-form-item>
        <el-form-item label="手机" prop="mobile">
          <el-input v-model="addForm.mobile"></el-input>
        </el-form-item>
      </el-form>
<!--      底部区域-->
      <span slot="footer" class="dialog-footer">
        <el-button @click="addUserDialogVisible = false">取 消</el-button>
        <el-button type="primary" @click="addUser">确 定</el-button>
      </span>
    </el-dialog>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
// data
 	addForm: {
          username: '',
          password: '',
          email: '',
          mobile: ''
        }
// js
	addUser() {
        this.$refs.addUserFormRef.validate(async valid => {
          if (!valid) return
          // 可以发起添加用户的网络请求
          const {data: res} = await this.$http.post('users', this.addForm)
          if (res.meta.status !== 201) {
            this.$message.error('添加用户失败!')
          }
          this.$message.success('添加用户成功!')
            // 隐藏添加用户的对话框
          this.addUserDialogVisible = false
          // 重新获取用户列表
          this.getUserList()
        })
      }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

7. 项目完成,进行优化

7.1 添加babel,打包时移出所有console

// 判定是运行serve服务器或build打包,决定是否去掉console语句
const prodPlugins = []
if (process.env.NODE_ENV === 'production') {
  prodPlugins.push('transform-remove-console')
}

// plugins配置内加上
>>  ...prodPlugins
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

7.2 懒加载

// 将原来导入组件imort改成
const 命名 => () => import('路径')
  • 1
  • 2
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/294655
推荐阅读
相关标签
  

闽ICP备14008679号