1. 程式人生 > >iview實現table的可編輯

iview實現table的可編輯

遇到同事請教的這個問題,沒接觸過iview,以為和element一樣,只需要在table-column中使用作用域插槽即可,簡單又方便,結果發現它居然是用reder函式進行渲染的,so,仔細琢磨一下,寫了下面的demo,希望對大家有用。

效果:

程式碼:

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <link rel="stylesheet" type="text/css" href="http://unpkg.com/iview/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/iview/dist/iview.min.js"></script>
</head>
<body>

<div id="app">
    <i-table  border :columns="columns2" :data="data3"></i-table>
</div>

<script>
    
  var app = new Vue({
      el: '#app',
      data () {
        return {
                columns2: [
                     {
                        title: 'Name',
                        key: 'name'
                    },
                    {
                        title: 'Age',
                        key: 'age',
                           render: (h, params) => {

                            if (params.row.$isEdit) {
                            
                              return h('input', {

                                domProps: {
                                  value: params.row.age
                                },
                                on: {
                                  input: function (event) {
                                    params.row.age = event.target.value
                                  }
                                }
                              });
                            } else  {
                              
                              return h('div', params.row.age);
                            }
                        }
                    },
                    {
                        title: 'Address',
                        key: 'address'
                    },
                    {
                        title: 'Action',
                        key: 'action',
                        render: (h, params) => {
                            return h('Button', {
                                    props: {
                                        type: 'text',
                                        size: 'small'
                                    },
                                    on: {
                                      click: () => {
                                        if (params.row.$isEdit) {
                                          this.handleSave(params.row)
                                        } else {
                                          this.handleEdit(params.row)
                                        }
                                      }
                                    }
                                }, params.row.$isEdit ? '儲存' : '編輯')
                        }
                    }
                ],
                data3: [
                    {
                        name: '哈哈',
                        age: 18,
                        address: '上海',
                        $isEdit: false
                    },
                    {
                        name: '啦啦',
                        age: 24,
                        address: '北京',
                        $isEdit: false
                    }
                ]
              }
      },
        methods: {
            handleEdit (row) {
               this.$set(row, '$isEdit', true)
              
            }, 
            handleSave (row) {
              this.$set(row, '$isEdit', false)
            }
}
    })
</script>
</body>
</html>