在Vue中,created和methods是两个不同的生命周期钩子和实例方法,它们分别在不同的时机被执行。
created是Vue实例在创建完成后立即调用的生命周期钩子,它在实例被创建之后立即执行,这意味着在created钩子函数执行时,Vue实例已经完成了数据观测、属性和方法的运算、事件回调的初始化等一系列的操作。
methods是Vue实例中定义的方法,用于处理用户交互或响应数据变化等功能。methods可以在Vue实例创建后被调用,可以通过this关键字来访问Vue实例中的数据和其他方法。
由于created钩子函数是在Vue实例创建完成后立即执行的,因此created钩子函数执行的时候,methods已经被定义了,也就是说methods比created先执行。也就是说,当Vue实例创建完成后,created钩子函数会被立即调用,然后才会执行methods中的方法。
需要注意的是,在Vue中,created钩子函数只会在实例创建时执行一次,而methods中的方法可以被多次调用。
vue的生命周期有哪些
在Vue中,一个组件实例从创建到销毁的过程中,会触发一系列的生命周期钩子函数,这些钩子函数可以让我们在不同的阶段执行一些特定的逻辑,方便我们进行状态管理、数据操作、DOM更新等操作。Vue的生命周期可以分为以下八个阶段:
- beforeCreate: 在实例被创建之初,数据观测和属性初始化之前执行。
- created: 在实例被创建之后,数据观测和属性初始化完成之后执行。
- beforeMount: 在模板编译和挂载之前执行。
- mounted: 在模板编译和挂载完成之后执行。
- beforeUpdate: 在数据更新之前,DOM被重新渲染之前执行。
- updated: 在数据更新之后,DOM被重新渲染之后执行。
- beforeDestroy: 在实例被销毁之前执行,此时实例仍然可用。
- destroyed: 在实例被销毁之后执行,此时实例已经不可用。
除了这些钩子函数之外,还有一些其他的钩子函数,例如activated和deactivated,用于处理组件的keep-alive状态。
需要注意的是,每个生命周期钩子函数都有特定的用途和执行时机,使用不当可能会导致一些问题,因此在使用时需要结合具体场景进行选择和合理使用。
实例被创建之后的流程图
查询逻辑,点击下面图片可以放大
删除逻辑
删除功能
vue代码
<template> <el-table :data="tableData" style="width: 100%"> <el-table-column prop="id" label="id" width="180"> </el-table-column> <el-table-column prop="name" label="名字" width="180"> </el-table-column> <el-table-column prop="age" label="年龄" width="180"> </el-table-column> <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <template slot-scope="scope"> <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)" >修改</el-button> <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row.id)" >删除</el-button> </template> </el-table-column> </el-table> </template> <script> import { listNotice, delNotice } from "@/api/student/student"; export default { data() { return { tableData: [] } }, created() { this.getList(); }, methods: { /** 查询学生列表 */ getList() { listNotice().then(response => { this.tableData = response.data; }); }, /** 点击删除按钮 */ handleDelete(id){ console.log(id) this.$modal.confirm('是否确认删除学生编号为"' + id + '"的数据项?').then(function() { return delNotice(id); }).then(() => { this.getList(); this.$modal.msgSuccess("删除成功"); }).catch(() => {}); } } } </script> <style> </style>
js代码
import request from '@/utils/request' // 查询列表 export function listNotice(query) { return request({ url: '/student/student/list', method: 'get', params: query }) } // 删除学生 export function delNotice(id) { return request({ url: '/student/student/delete?id=' + id, method: 'get' }) }
增加功能
vue代码
<template> <div> <el-button type="primary" @click="addBtn()">添加</el-button> <el-table :data="tableData" style="width: 100%"> <el-table-column prop="id" label="id" width="180"> </el-table-column> <el-table-column prop="name" label="名字" width="180"> </el-table-column> <el-table-column prop="age" label="年龄" width="180"> </el-table-column> <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <template slot-scope="scope"> <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)" >修改</el-button> <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row.id)" >删除</el-button> </template> </el-table-column> </el-table> <!-- 添加 --> <el-dialog title="收货地址" :visible.sync="dialogFormVisible"> <el-form :model="form"> <el-form-item label="学生姓名" :label-width="formLabelWidth"> <el-input v-model="form.name" autocomplete="off"></el-input> </el-form-item> <el-form-item label="学生年龄" :label-width="formLabelWidth"> <el-input v-model="form.age" autocomplete="off"></el-input> </el-form-item> </el-form> <div slot="footer" class="dialog-footer"> <el-button @click="dialogFormVisible = false">取 消</el-button> <el-button type="primary" @click="formOk()">确 定</el-button> </div> </el-dialog> </div> </template> <script> import { listNotice,delNotice,addNotice } from "@/api/student/student"; export default { data() { return { tableData: [], dialogFormVisible : false, form : {} } }, created() { this.getList(); }, methods: { /** 查询公告列表 */ getList() { listNotice().then(response => { this.tableData = response.data; }); }, /** 点击删除按钮 */ handleDelete(id){ this.$modal.confirm('是否确认删除学生编号为"' + id + '"的数据项?').then(function() { return delNotice(id); }).then(() => { this.getList(); this.$modal.msgSuccess("删除成功"); }).catch(() => {}); }, /** 点击确定按钮事件 */ formOk(){ addNotice(this.form).then(response => { this.$modal.msgSuccess("新增成功"); this.dialogFormVisible = false; this.getList(); }); }, /** 点击添加事件 */ addBtn(){ this.form = {}; this.dialogFormVisible = true } } } </script> <style> </style>
js代码
import request from '@/utils/request' // 查询列表 export function listNotice(query) { return request({ url: '/student/student/list', method: 'get', params: query }) } // 删除学生 export function delNotice(id) { return request({ url: '/student/student/delete?id=' + id, method: 'get' }) } // 新增学生 export function addNotice(data) { return request({ url: '/student/student/add', method: 'post', data: data }) }