iview的table中嵌套input,select等

最近要做一个table,里边的内容比较特殊,全都是由下拉框和输入框等构成的,看到网上大部分人都是通过用render函数解决的,因为之前使用过iview的可编辑表格功能,是通过slot实现的,尝试着通过slot来

实现了下该功能,相比render,看起来友好多了。

不过还是有缺陷的,可以很明显的看到下边v-model中绑定的值,我并没有从slot-scope中取出,绑定里边的数据。而是选择直接手动绑定了页面的tableData,这是因为我发现如果使用scople中的row的数据绑定,会造成数据没有办法完成双向的绑定,只能完成单向的,造成的结果就是,如果手动修改tableData数组中的值,页面的值会发生改变,但是如果修改了页面的输入框的值,tableData的数据不会发生改变。

具体原因我认为多半是vue的单向数据流造成的,相同的情况之前在封装组件的时候遇到过,之前的解决方法到这里没有办法使用。

如果有高手知道原因或者解决办法,烦请不吝赐教。

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>iview example</title>
    <link rel="stylesheet" type="text/css" href="http://unpkg.com/view-design/dist/styles/iview.css">
    <script type="text/javascript" src="http://vuejs.org/js/vue.min.js"></script>
    <script type="text/javascript" src="http://unpkg.com/view-design/dist/iview.min.js"></script>
    <style type="text/css">
        .ivu-table-wrapper{
            overflow: visible;
        }
        .ivu-table th {
            text-align: center;
        }
        .ivu-table-cell{
            text-align: center;
        }
    </style>
</head>
<body>
<div id="app">

    <i-table :columns="tableHead" :data="tableData">

        <template slot-scope="scope" slot="date1">
          <date-picker type="datetime" v-model="tableData[scope.index].date1.value" style="width: 150px">
          </date-picker>
        </template>

        <template slot-scope="scope" slot="date2">
          <date-picker type="datetime" v-model="tableData[scope.index].date2.value" style="width: 150px">
          </date-picker>
        </template>

        <template slot-scope="scope" slot="select1">
            <i-select v-model="tableData[scope.index].select1.value" style="width:130px">
                <i-option v-for="item in scope.row.select1.cityList" :value="item.value" :key="item.value">{{ item.label }}</i-option>
            </i-select>
        </template>
        <template slot-scope="scope" slot="select2">
            <i-select v-model="tableData[scope.index].select2.value" style="width:130px">
                <i-option v-for="item in scope.row.select2.cityList" :value="item.value" :key="item.value">{{ item.label }}</i-option>
            </i-select>
        </template>
        <template slot-scope="scope" slot="select3">
            <i-select v-model="tableData[scope.index].select3.value" style="width:130px">
                <i-option v-for="item in scope.row.select3.cityList" :value="item.value" :key="item.value">{{ item.label }}</i-option>
            </i-select>
        </template>
        <template slot-scope="scope" slot="input1">
          <i-input ref="test" v-model="tableData[scope.index].input1.value"  style="width: 100px" >
          </i-input>
        </template>
        <template slot-scope="scope" slot="input2">
          <i-input v-model="tableData[scope.index].input2.value"  style="width: 100px" >
          </i-input>
        </template>
        <template slot-scope="scope" slot="input3">
          <i-input v-model="tableData[scope.index].input3.value"  style="width: 100px" >
          </i-input>
        </template>
        <template slot-scope="scope" slot="input4">
          <i-input v-model="tableData[scope.index].input4.value"  style="width: 100px" >
          </i-input>
        </template>
        <template slot-scope="scope" slot="input5">
          <i-input v-model="tableData[scope.index].input5.value"  style="width: 100px" >
          </i-input>
        </template>

    </i-table>
</div>
<script>
    window.vm = new Vue({
        el: ‘#app‘,
        data: {
            tableData: [
              /*测试数据一*/
              {
                date1: {
                    value : new Date()
                },
                date2: {
                    value : new Date()
                },
                select1: {
                    value:‘‘,
                    cityList: [
                        {
                            value: ‘New York‘,
                            label: ‘New York‘
                        },
                        {
                            value: ‘London‘,
                            label: ‘London‘
                        }
                    ],
                },
                select2: {
                    value:‘‘,
                    cityList: [
                        {
                            value: ‘New York‘,
                            label: ‘New York‘
                        },
                        {
                            value: ‘London‘,
                            label: ‘London‘
                        }
                    ],

                },
                select3: {
                    value:‘‘,
                    cityList: [
                        {
                            value: ‘train‘,
                            label: ‘火车‘
                        },
                        {
                            value: ‘plane‘,
                            label: ‘飞机‘
                        },
                    ],

                },
                input1: {
                    value : ‘111‘
                },
                input2: {
                    value : ‘111‘
                },
                input3: {
                    value : ‘111‘
                },
                input4: {
                    value : ‘111‘
                },
                input5: {
                    value : ‘111‘
                },
              },
              /*测试数据二*/
              {
                date1: {
                    value : new Date()
                },
                date2: {
                    value : new Date()
                },
                select1: {
                    value:‘‘,
                    cityList: [
                        {
                            value: ‘New York‘,
                            label: ‘New York‘
                        },
                        {
                            value: ‘London‘,
                            label: ‘London‘
                        },
                    ],
                },
                select2: {
                    value:‘‘,
                    cityList: [
                        {
                            value: ‘New York‘,
                            label: ‘New York‘
                        },
                        {
                            value: ‘London‘,
                            label: ‘London‘
                        },
                    ],

                },
                select3: {
                    value:‘‘,
                    cityList: [
                        {
                            value: ‘train‘,
                            label: ‘火车‘
                        },
                        {
                            value: ‘plane‘,
                            label: ‘飞机‘
                        },
                    ],

                },
                input1: {
                    value : ‘222‘
                },
                input2: {
                    value : ‘222‘
                },
                input3: {
                    value : ‘222‘
                },
                input4: {
                    value : ‘222‘
                },
                input5: {
                    value : ‘222‘
                },
              },
              /*测试数据三*/
              {
                date1: {
                    value : new Date()
                },
                date2: {
                    value : new Date()
                },
                select1: {
                    value:‘‘,
                    cityList: [
                        {
                            value: ‘New York‘,
                            label: ‘New York‘
                        },
                        {
                            value: ‘London‘,
                            label: ‘London‘
                        },
                    ],
                },
                select2: {
                    value:‘‘,
                    cityList: [
                        {
                            value: ‘New York‘,
                            label: ‘New York‘
                        },
                        {
                            value: ‘London‘,
                            label: ‘London‘
                        },
                    ],

                },
                select3: {
                    value:‘‘,
                    cityList: [
                        {
                            value: ‘train‘,
                            label: ‘火车‘
                        },
                        {
                            value: ‘plane‘,
                            label: ‘飞机‘
                        },
                    ],

                },
                input1: {
                    value : ‘333‘
                },
                input2: {
                    value : ‘333‘
                },
                input3: {
                    value : ‘333‘
                },
                input4: {
                    value : ‘333‘
                },
                input5: {
                    value : ‘333‘
                },
              },
            ],
            tableHead: [{title:"出发日期",slot:"date1",width:"170"},{title:"结束日期",slot:"date2",width:"170"},{title:"出发地",slot:"select1"},{title:"目的地",slot:"select2"},{title:"交通工具",slot:"select3"},{title:"项目代码",slot:"input1"},{title:"出差公司名称及地址",slot:"input2"},{title:"出差目的",slot:"input3"},{title:"随行人员",slot:"input4"},{title:"备注",slot:"input5"}]
        },
        created:function(){
        },
        methods: {
            getData : function(){
                let that = this;
                for(let i=0;i<that.tableData.length;i++){
                    let row = that.tableData[i];
                    let str = ‘第‘+i+‘行的数据为‘;
                    for(let key in row){
                        if(typeof row[key].value != "undefined"){
                            str += row[key].value+"   ";
                        }
                    }
                    console.log(str);
                }

            }
        }
    })
  </script>
</body>
</html>

代码中,写了一个简单的取数据的方法,运行结果如下图:

原文地址:https://www.cnblogs.com/mayiaction/p/12067493.html

时间: 2024-11-03 12:47:13

iview的table中嵌套input,select等的相关文章

mysql中insert与select的嵌套使用

如何在mysql从多个表中组合字段然后插入到一个新表中,通过一条sql语句实现.具体情形是:有三张表a.b.c,现在需要从表b和表c中分别查几个字段的值插入到表a中对应的字段.对于这种情况,我们可以使用如下的语句来实现: INSERT INTO db1_name(field1,field2) SELECT field1,field2 FROM db2_name 当然,上面的语句比较适合两个表的数据互插,如果多个表就不适应了.对于多个表,我们可以先将需要查询的字段join起来,然后组成一个视图后再

iview的table组件中加入超链接组件,可编辑组件,选择组件,日期组件

这篇文章主要介绍了iview的table组件中使用选择框,日期,可编辑表格,超链接等组件. 1.select选择组件 // tableColumn数组响应对象需要传入一个固定的option数组,如果该数组是异步动态生成的该组件不能正常渲染,因为在获取option数组之前table渲染时option是undefined. supportSelect(item) { item.render = (h, params)=>{ return h('Select', { props: { value: p

HTML JS获取到table中所有的input的值 传递到前端

1.获取table对象 2.行循环.列循环然后遍历每一个格子里面的input值 3.用连接符连接 4.放置到form的隐藏域里面. 5.传递到后台. js代码:注意:1.input必须跟[0]否则无法取出值  2.在JS的双引号里面不能在用""改成''而且{}在引号里也会被识别报错.将字符串传回后台处理即可 function GetInfoFromTable() { var tableInfo = ""; var tableObj = document.getEle

《项目经验》--后台一般处理程序向前台JS文件传递JSON,JS解析JSON,将数据显示在界面--显示在DropDownList 或 显示在动态创建的table中

http://blog.csdn.net/mazhaojuan/article/details/8599167 先看一下我要实现的功能界面: 这篇文章主要介绍:后台一般处理程序把从数据库查找的数据,转换成JSON,然后传递到前台JS文件中,JS解析JSON数据,并将数据显示在界面,主要介绍两种显示方式,显示在DropDownList控件 or 显示在动态创建的Table表中.   本文主要介绍两个地方: 1.根据学年查询学期信息的实现--JS将解析的JSON数据绑定到DropDownList框

js导出table中的EXCEL总结

导出EXCEL一般是用PHP做,但是项目中,有时候PHP后端工程师返回的数据不是我们想要的,作为前端开发工程师,把对应的数据编号转换为文字后,展示给用户,但是,需求要把数据同时导出一份EXCEl.无奈之下,我只能用js导出table中的数据了. 导出EXCEl一般是自己人用的,所以用js导出,因为js导出EXCEL一般情况下兼容性不是很好,很多只是兼容IE浏览器,还要设置在工具栏中进行设置才能导出,因为会相对比较烦.下面介绍几种方法: 一.js导出EXCEl带单元格合并[已验证,比较好用] //

对Table的操作(赋值、动态新增行、删除行、保存table中多行数据对象

一.成品界面: 二.功能点描述 从后台传list对象,前台table展示. 可添加行操作,新增或者删除行. 三.源码: Form表单: <form id="reportForm" method="post"> <table class="table-grid table-list" cellpadding="1" cellspacing="1" id="reportTable&q

Table里嵌套ASPXGridView

Table里嵌套ASPXGridView 简述 有时候我们在录入数据的时候,因为录入数据字段比较少,所以可以直接在GridView上录入. 但是我们有些公用字段是在单头中固定的,GridView显示的是单身. 这样为了方便我们把GridView嵌套在Table中,录入数据时就可以取到单头上的数据. 也可以根据单头来检索同类数据,编辑数据也可在GridView上操作. ASPXGridView 这边在GridView是选择了DevExpress控件里的ASPXGridView. 这个第三方控件是美

MySQL中INSERT INTO SELECT的使用

1. 语法介绍      有三张表a.b.c,现在需要从表b和表c中分别查几个字段的值插入到表a中对应的字段.对于这种情况,可以使用如下的语句来实现: INSERT INTO db1_name (field1,field2) SELECT field1,field2 FROM db2_name 上面的语句比较适合两个表的数据互插,如果多个表就不适应了.对于多个表,可以先将需要查询的字段JOIN起来,然后组成一个视图后再SELECT FROM就可以了: INSERT INTO a (field1,

table中的td自动换行

总有那么几个时候会觉得,table的td不能自适应换行真坑,凭什么只能用tr来换行,经常数据都是连在一起的呀,你叫我怎么把它拆分放到tr里...... 那能不能用ul和li来替换?可以是可以,不过有时遇到"牛逼"的领导你能怎么办,就要用table怎么办!就问你怎么办!!! 那就把tr当ul,td当li用咯! 1.效果图: 2.这是重置样式normalize.css代码: /** * Correct `block` display not defined in IE 8/9. * * 修