首页 > 其他分享 >VUE学习笔记(六)

VUE学习笔记(六)

时间:2024-05-29 10:11:00浏览次数:24  
标签:VUE const name tableRow value 学习 axios 笔记 import

数据添加、修改、watch监听和删除

数据添加

AddCategory.vue

<template>

    <el-dialog v-model="dialogVisible" :title="dialogTitle" width="500" :before-close="handleClose">
        <el-form :model="ruleFroms" label-width="auto" style="max-width: 600px">
            <el-form-item label="分类名称">
                <el-input v-model="ruleFroms.name" />
            </el-form-item>
        </el-form>
        <template #footer>
            <div class="dialog-footer">
                <el-button @click="dialogVisible = false">取消</el-button>
                <el-button type="primary" @click="addCategory">
                    提交
                </el-button>
            </div>
        </template>
    </el-dialog>
</template>

<script setup>
import axios from '@/api/api_config';
import { reactive, toRefs } from 'vue'
import { ElMessage } from 'element-plus';
///----------------------------------

const props = defineProps({
    dialogTitle: {
        type: String,
        default: 'AddCategory'
    }
})
const state = reactive({
    dialogVisible: false,
    ruleFroms: {
        id: '',
        name: ''
    },
})
///----------------------------------
//打开对话框
const dialogCategory = () => {
    state.dialogVisible = true;

}
//提交修改或者添加
const addCategory = () => {
    if (props.dialogTitle == "添加分类") {
        let param = {
            name: ruleFroms.value.name
        }
        axios.post('/category', param).then(() => {
            state.dialogVisible = false
            ElMessage.success('添加成功')
        })
    }
}


//解构
const { dialogVisible, ruleFroms } = toRefs(state)


//主动暴露给父组件,编译器的宏命令,不需要引入
defineExpose({
    dialogCategory
})

</script>

数据修改,watch监听

Category.vue

<template>
    <el-card class="box-card">
        <template #header>
            <div class="card-header">
                <span>商品分类</span>
                <el-button type="primary" icon="CirclePlus" round @click="handleDialog()">添加分类</el-button>
            </div>
        </template>
        <el-table :data="tableData.list" stripe style="width: 100%">
            <el-table-column prop="id" label="Id" width="180" />
            <el-table-column prop="name" label="名称" width="180" />
            <el-table-column fixed="right" label="操作" width="180">
                <template #default="scope">
                    <el-button type="success" size="small" @click="handleDialog(scope.row)">
                        修改
                    </el-button>
                    <el-button type="danger" size="small">删除</el-button>
                </template>
            </el-table-column>
        </el-table>

    </el-card>
    <AddCategoryVue ref="addCategoryRef" :dialogTitle="dialogTitle" :tableRow="tableRow"></AddCategoryVue>
</template>

<script setup>

import { onMounted, reactive, ref } from 'vue'
import axios from "@/api/api_config.js"

import AddCategoryVue from '@/components/AddCategory.vue'
import { isNull } from '@/utils/filter.js'

///----------------------------------
const tableData = reactive({ list: [] })
const addCategoryRef = ref(null)//获取子组件实例
const dialogTitle = ref("")//对话框标题
const tableRow = ref({})
///----------------------------------

onMounted(() => {
    getList()
})

//获取分类信息
const getList = () => {
    return axios.get('/category').then((res) => {
        tableData.list = res.data
    })
}

//打开分类页
const handleDialog = (row) => {
    if (isNull(row)) {
        dialogTitle.value = "添加分类"
    } else {
        dialogTitle.value = "修改分类"
        tableRow.value = row
    }

    addCategoryRef.value.dialogCategory()//调用子组件方法

}

</script>

AddCategory.vue

<template>

    <el-dialog v-model="dialogVisible" :title="dialogTitle" width="500" :before-close="handleClose">
        <el-form :model="ruleFroms" label-width="auto" style="max-width: 600px">
            <el-form-item label="分类名称" prop="name">
                <el-input v-model="ruleFroms.name" />
            </el-form-item>
        </el-form>
        <template #footer>
            <div class="dialog-footer">
                <el-button @click="dialogVisible = false">取消</el-button>
                <el-button type="primary" @click="addCategory">
                    提交
                </el-button>
            </div>
        </template>
    </el-dialog>
</template>

<script setup>
import axios from '@/api/api_config';
import { reactive, toRefs, watch } from 'vue'
import { ElMessage } from 'element-plus';
///----------------------------------

const props = defineProps({
    dialogTitle: {
        type: String,
        default: 'AddCategory'
    },
    tableRow: {
        type: Object
    }
})
const state = reactive({
    dialogVisible: false,
    ruleFroms: {
        id: '',
        name: ''
    },
})
//监听器
watch(
    //需要监控的数据
    () => props.tableRow,
    //检测到变化后需要做的事情
    () => {
        state.ruleFroms = props.tableRow;
    },
    //配置
    { deep: true, immediate: true }
)
///----------------------------------
//打开对话框
const dialogCategory = () => {
    state.dialogVisible = true;

}
//提交修改或者添加
const addCategory = () => {
    if (props.dialogTitle == "添加分类") {
        let param = {
            name: ruleFroms.value.name
        }
        axios.post('/category', param).then(() => {
            state.dialogVisible = false
            ElMessage.success('添加成功')
        })
    } else {
        console.log("id", props.tableRow.id)
        console.log("name", ruleFroms.value.name)

        let param = {
            id: props.tableRow.id,
            name: ruleFroms.value.name
        }
        axios.put('/category', param).then(() => {
            state.dialogVisible = false
            ElMessage.success('修改成功')
        })
    }
}


//解构
const { dialogVisible, ruleFroms } = toRefs(state)


//主动暴露给父组件,编译器的宏命令,不需要引入
defineExpose({
    dialogCategory
})

</script>

删除操作

Category.vue

<template>
    <el-card class="box-card">
        <template #header>
            <div class="card-header">
                <span>商品分类</span>
                <el-button type="primary" icon="CirclePlus" round @click="handleDialog()">添加分类</el-button>
            </div>
        </template>
        <el-table :data="tableData.list" stripe style="width: 100%">
            <el-table-column prop="id" label="Id" width="180" />
            <el-table-column prop="name" label="名称" width="180" />
            <el-table-column fixed="right" label="操作" width="180">
                <template #default="scope">
                    <el-button type="success" size="small" @click="handleDialog(scope.row)">
                        修改
                    </el-button>
                    <el-button type="danger" size="small" @click="open(scope.row.id)">删除</el-button>
                </template>
            </el-table-column>
        </el-table>

    </el-card>
    <AddCategoryVue ref="addCategoryRef" :dialogTitle="dialogTitle" :tableRow="tableRow"></AddCategoryVue>
</template>

<script setup>

import { onMounted, reactive, ref } from 'vue'
import axios from "@/api/api_config.js"
import { ElMessage, ElMessageBox } from 'element-plus'
import AddCategoryVue from '@/components/AddCategory.vue'
import { isNull } from '@/utils/filter.js'

///----------------------------------
const tableData = reactive({ list: [] })
const addCategoryRef = ref(null)//获取子组件实例
const dialogTitle = ref("")//对话框标题
const tableRow = ref({})
///----------------------------------

onMounted(() => {
    getList()
})

//获取分类信息
const getList = () => {
    return axios.get('/category').then((res) => {
        tableData.list = res.data
    })
}

//打开分类页
const handleDialog = (row) => {
    if (isNull(row)) {
        dialogTitle.value = "添加分类"
    } else {
        dialogTitle.value = "修改分类"
        tableRow.value = row
    }

    addCategoryRef.value.dialogCategory()//调用子组件方法

}

const open = (id) => {
    ElMessageBox.confirm(
        '确定要删除吗?',
        '信息提示',
        {
            confirmButtonText: '确定',
            cancelButtonText: '取消',
            type: 'warning',
        }
    )
        .then(() => {
            console.log(id)
            axios.delete(`/Category/${id}`).then(() => {
                ElMessage({
                    type: 'success',
                    message: '删除成功',
                });
                //重新加载数据
                getList();
            })

        })
        .catch(() => {
            ElMessage({
                type: 'info',
                message: '取消删除',
            })
        })
}

</script>

 

标签:VUE,const,name,tableRow,value,学习,axios,笔记,import
From: https://www.cnblogs.com/Lvkang/p/18219599

相关文章

  • vue3项目中 路由elementPlus当中的标签页结合封装
    在项目当中大家应该都有看到过,像标签页一样的面包屑吧,接下来我为大家介绍一下,主要组成部分:路由+组件库的标签页。ok就这么easy!!!它实现的方法也不难哦请看效果图ok,在中间实现思路与大家分享一下:主要是使用watch监听我们的route路由的变化,然后根据传递过来的路由信息,进行标签页......
  • VUE学习笔记(五)
    defineprops和torefs的使用用法,从父组件(Category.vue)向子组件(AddCategory.vue)传输数据Category.vue<template><el-cardclass="box-card"><template#header><divclass="card-header"><s......
  • vue前端页面搭建
    十、页面搭建学习10.1安装element在这里看一下有没有elementui,有就是下载成功了。10.2mainjs全局引入importElementUIfrom'element-ui';import'element-ui/lib/theme-chalk/index.css';Vue.use(ElementUI)10.3简单试用运行serve10.4页面布局(都可以直接查......
  • Prism框架与Microsoft.Extensions.DependencyInjection的集成使用笔记
    在现代的WPF应用开发中,Prism框架提供了强大的模块化、依赖注入和MVVM支持,而Microsoft.Extensions.DependencyInjection提供了简洁而功能强大的依赖注入机制。另外很重要的一点是Microsoft.Extensions.*或者第三方的Nuget基本会提供Microsoft.Extensions.DependencyInjection,那么......
  • vue 项目发布到docker
    在vue项目目录下执行npmrunbuild 会生成dist文件夹,dist文件夹中的内容就是包含了打包好的静态文件 写dockerfile FROMnginx#将本地的dist文件夹复制到nginx默认的静态文件目录COPY./dist/usr/share/nginx/html执行 dockerbuild-tmy-vue-app.  ......
  • SVRF学习_①_review下先
    由来自从正式工作后,时间都被有偿贡献给了公司。周末闲暇,也无兴致聊表乐趣之事。目前从事IC设计相关,大多工作资料都属于商业机密。<_>最近闲暇,想趁此诸君交流一些开放知识,分享会使我们共同进步!简单总结当前技术面想到啥写啥,随时改layout绘制--本职(90%以上都属于商业......
  • opencascade 快速显示AIS_ConnectedInteractive源码学习
    AIS_ConcentricRelationtypedefPrsDim_ConcentricRelationAIS_ConcentricRelationAIS_ConnectedInteractive简介创建一个任意位置的另一个交互对象实例作为参考。这允许您使用连接的交互对象,而无需重新计算其表示、选择或图形结构。这些属性是从您的参考对象推导而来......
  • Vitis HLS 学习笔记--块级控制协议-ap_ctrl_chain/ap_ctrl_hs/ap_ctrl_none
    目录1.简介2.详细分析2.1使用场景区别2.2 ap_continue行为详解2.3 ap_ctrl_chain行为详解3.总结1.简介块级控制协议允许硬件模块表明:何时可以开始处理数据。何时完成了数据处理。以及何时处于空闲状态,准备接受新的数据输入。这些信号用于本模块在与其他硬......
  • 数据结构与算法学习——二叉树
    题目PS:下列题目均来自leetcode中灵神题单938.二叉搜索树的范围和classSolution:defrangeSumBST(self,root:TreeNode,low:int,high:int)->int:ifnotroot:return0ifroot.val>high:returnself.rangeSumBST(r......
  • Django学习-虚拟环境创建、URL组成部分详解
    一、创建一个Django的虚拟环境 生成虚拟环境在D:\Virtualenvs下 在pycharm中引入django虚拟环境 二、URL详解 URL,统一资源定位符,一个URL由以下几部分组成:scheme://host:port/path/?query-string=xxx#anchorscheme:代表的是访问的协议,一般为http或者https以及ftp等h......