Vue.js 实现表单数据参数传递,以及不同独立按钮之间的参数传递

8 篇文章 0 订阅
1 篇文章 0 订阅

使用vue.js以及基于vue的element ui框架

昨天就纠结了很久的问题:需求是,
想要在下面这样的表格中,
这里写图片描述
这里写图片描述
点击每一行数据最后的操作(审批)按钮,就弹出一个模态框,如图二,点击模态框中的同意或者拒绝按钮,就改变图一表格中的状态,每一行都是独立的数据。所以需要传参数,最开始的思路是,点击审批按钮触发事件,然后再这个事件中监听用户点击了同意还是拒绝按钮再来改变状态,试了半天发现行不通,只能换种思维。
修改成审批按钮和同意拒绝按钮都是独立的事件,同时传递当前数据的参数给点击事件,
具体实现方法如下:

这是表格的代码,要注意审批按钮事件带的是当前数据参数

<el-table :data="tableData" style="width: 100%;margin: 10px 0 15px 0;">
    <el-table-column type="selection"></el-table-column>
    <el-table-column prop="roomName" label="教室名称" min-width="140px"></el-table-column>
    <el-table-column prop="roomType" label="教室类别"></el-table-column>
    <el-table-column prop="roomPosition" label="教室位置" min-width="120px"></el-table-column>
    <el-table-column prop="roomSize" label="可容人数"></el-table-column>
    <el-table-column prop="apply" label="申请人"></el-table-column>
    <el-table-column prop="useDate" label="使用时间" min-width="210px"></el-table-column>
    <el-table-column prop="status" label="状态">
    <template scope="scope">
        <el-tag :type="scope.row.status === '已审批' ? 'success' : 'warning'" close-transition>{{scope.row.status}}</el-tag>
    </template>
    </el-table-column>
        <el-table-column label="操作" min-width="100px">
            <template scope="scope">
                <el-button @click="handleApply(scope.$index, scope.row)" type="success" size="small">审批</el-button>
            </template>
        </el-table-column>
    </el-table>

表格的数据结构如下,主要看每一组数据最后的status(状态)

tableData: [{
        roomName: '多媒体功能教室',
        roomType: '微机',
        roomPosition: '博学楼一楼',
        roomSize: '300',
        apply: '张三',
        useDate: '2017-8-2 15:45:44-18:00:00',
        status: '未审批'
    },
    {
        roomName: '多媒体功能教室',
        roomType: '音乐',
        roomPosition: '博学楼一楼',
        roomSize: '300',
        apply: '张三',
        useDate: '2017-8-2 15:45:44-18:00:00',
        status: '已审批'
    },
    {
        roomName: 'xxx功能教室',
        roomType: '音乐',
        roomPosition: '博学楼一楼',
        roomSize: '300',
        apply: '张三',
        useDate: '2017-8-2 15:45:44-18:00:00',
        status: '已拒绝'
    }
]

点击显示的模态框代码如下:

<el-dialog title="功能教室审批" :visible.sync="applyRoom" modal-append-to-body="false">
    <el-form ref="applyRoom" :model="applyRoomForm" label-width="100px">
        <el-form-item label="教室名称" prop="roomName" style="width: 93%;">
            <el-label v-model="applyRoomForm.roomName">{{applyRoomForm.roomName}}</el-label>
        </el-form-item>
        ...中间的重复字段省略
        <el-form-item label="状态" prop="status" style="width: 93%;">
            <el-label v-model="applyRoomForm.status">{{applyRoomForm.status}}</el-label>
        </el-form-item>
            <el-form-item label="审批备注" prop="applyRemarks" style="width: 93%;">
            <el-input type="textarea" v-model="applyRoomForm.applyRemarks"></el-input>
        </el-form-item>
        <el-form-item>
            <template scope="scope">
                <el-button type="primary" @click="agreeApply(applyRoomForm)" class="agreeBtn actionBtn">同意</el-button>
                <el-button type="success" @click="refuseApply(applyRoomForm)" class="refuseBtn actionBtn">拒绝</el-button>
            </template>
        </el-form-item>
    </el-form>
</el-dialog>

模态框的数据结构:

applyRoomForm: []

对应的方法如下:
点击审批按钮显示模态框事件:
//这里使用_this是为了防止出现this指向错误问题,因为在点击审批按钮时已经将这一行数据传递给了这个函数,然后把这一行数据赋值给applyRoomForm,即为模态框中显示的信息。

handleApply: function(index, row) {
    var _this = this;
    _this.applyRoomForm = row;//将参数信息赋值给applyRoomForm,即为模态框中显示的信息。
    _this.applyRoom = true;//显示模态框
},

点击同意按钮的事件:

agreeApply: function(data) {
    //data参数是当前行的数据
    //有三种状态,已审批,已拒绝,未审批
    if(data.status == '未审批') {
        this.applyRoom = false;
        data.status = '已审批';
        this.$notify.success({
            title: '成功',
            message: '教室审批成功'
        });
        return
    } else if(data.status == '已审批') {
        this.$notify.warning({
            title: '提示',
            message: '该教室审批已通过,不可重复操作'
        });
        return
    } else if(data.status == '已拒绝') {
        this.$notify.error({
            title: '提示',
            message: '该教室审批已拒绝,不可操作'
        });
        return
    }
},

点击拒绝按钮的事件:

refuseApply: function(data) {
    //有三种状态,已审批,已拒绝,未审批
    if(data.status == '已审批') {
        this.$notify.error({
            message: '该教室已审批通过,不可操作。'
        });
        return
    } else if(data.status == '未审批') {
        data.status = '已拒绝';
        this.$notify.warning({
            title: '提示',
            message: '该教室申请已被拒绝'
        });
        return
    } else if(data.status == '已拒绝') {
        this.$notify.warning({
            title: '提示',
            message: '该教室申请已被拒绝,不可重复操作'
        });
        return
    }
},

这样问题就解决啦,不得不感叹Vue真的很强大。

  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
下面是一个使用Vue.js和Java编写的前端向后端传递参数的例子: 前端代码(使用Vue.js): ```html <!DOCTYPE html> <html> <head> <title>Vue Example</title> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> <script> new Vue({ el: '#app', data: { name: '', age: '', response: '' }, methods: { sendData() { axios.post('backend.php', { name: this.name, age: this.age }) .then(response => { this.response = response.data; }) .catch(error => { console.error(error); }); } } }); </script> </head> <body> <div id="app"> <input type="text" v-model="name" placeholder="Name"> <input type="text" v-model="age" placeholder="Age"> <button @click="sendData">Send Data</button> <div>{{ response }}</div> </div> </body> </html> ``` 后端代码(Java,使用Spring Boot): ```java import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; @SpringBootApplication @RestController public class BackendApplication { public static void main(String[] args) { SpringApplication.run(BackendApplication.class, args); } @PostMapping("/backend.php") public String processData(@RequestBody RequestData requestData) { String name = requestData.getName(); int age = requestData.getAge(); // 处理数据,这里只是简单地将数据拼接成字符串作为响应返回 String response = "Name: " + name + ", Age: " + age; return response; } public static class RequestData { private String name; private int age; // 添加默认构造函数和getter/setter方法 public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } } ``` 在这个例子中,我们使用Vue.js在前端创建了一个简单的表单,包含了一个文本输入框用于输入姓名和年龄,并有一个按钮用于发送数据。我们使用`v-model`指令将输入框的值绑定到Vue实例的`name`和`age`属性上。 在Vue实例的`sendData`方法中,我们使用Axios库发送POST请求到后端的`/backend.php`接口,并将`name`和`age`作为请求体发送。在成功响应后,我们将后端返回的响应数据赋值给Vue实例的`response`属性,用于显示在页面上。 后端使用Spring Boot框架编写了一个简单的Java应用程序。我们创建了一个RESTful接口`/backend.php`,通过`@PostMapping`注解来处理POST请求。请求体中的数据会自动映射到`RequestData`类中的属性。在处理数据时,我们将姓名和年龄拼接成字符串作为响应返回。 请注意,需要安装Vue.js和Axios库,以及配置好Java开发环境和Spring Boot依赖。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值