最近在开发一个性能,点击增加商品按钮,展现商品列表弹层,点击复选框选中,弹层会敞开,并且再次点击商品按钮,之前被选中的复选框会不可点击,目标就是避免反复增加同一件商品,用到了数组办法indexOf(),用来判断我商品列表外面的商品有没有被选中过,如果选中了,则设置item.checked = true。我把点击按钮展现弹层的步骤给省略掉了。上面是我的代码:

<!DOCTYPE html><html><head>    <meta charset="utf-8">    <title>应用element-ui中的el-radio(单选框)组件实现选中和勾销选中性能</title>    <!--引入 element-ui 的款式,-->    <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">    <script src="https://cdn.bootcss.com/vue/2.5.16/vue.min.js"></script>    <!-- 引入element 的组件库-->    <script src="https://unpkg.com/element-ui/lib/index.js"></script>    <style>        * {            margin: 0;            padding: 0;        }    </style></head><body>    <div id="app">        <div style="text-align: center; font-size: 20px">模仿一个弹层</div>        <el-table :data="list" border fit highlight-current-row header-cell-class-name="chatail-table-header-cell">            <el-table-column label="商品名称" align="center" min-width="80">                <template slot-scope="{ row }">                    <span>{{ row.name }}</span>                </template>            </el-table-column>            <el-table-column label="操作" align="center" min-width="60" fixed="right"                class-name="small-padding fixed-width">                <template slot-scope="{ row }">                    <el-checkbox v-model="row.checked" :disabled="row.checked" @change="checkedFun(row)">{{                        row.checked ? "已选" : "抉择"                        }}</el-checkbox>                </template>            </el-table-column>        </el-table>    </div>    <script>        new Vue({            el: '#app',            data() {                return {                    list: [                        {                            id: 1,                            name: '测试商品1'                        },                        {                            id: 2,                            name: '测试商品2'                        },                        {                            id: 3,                            name: '测试商品3'                        },                        {                            id: 4,                            name: '测试商品4'                        },                        {                            id: 5,                            name: '测试商品5'                        },                    ]                }            },            mounted() {                this.getProductList([1, 3, 5]);            },            methods: {                getProductList(checkedIdArr) {                    this.list.forEach((item) => {                        item.checked = false;                        if (checkedIdArr && checkedIdArr.length > 0) {                            // 传入的数据和列表里的数据比照,如果没有,则让复选框选中                            if (checkedIdArr.indexOf(item.id) > -1) {                                item.checked = true;                            }                        }                    });                    // 或者这样赋值也能够                    //   this.list = this.list.map((item) => {                    //         item.checked = false;                    //         if (checkedIdArr && checkedIdArr.length > 0) {                    //             if (checkedIdArr.indexOf(item.id) > -1) {                    //                 item.checked = true;                    //             }                    //         }                    //         return item;                    //     });                },                checkedFun(row) {                    let index = this.list.map(item => item.id).indexOf(row.id)                    // 这样写也能够                    // findIndex 用来获取数组中第一个满足条件的元素下标                    // let index = this.list.findIndex((value, index, arr) => {                    //     return value.id == row.id                    // })                    //这样就能够渲染到视图层了                    this.$set(this.list, index, { ...row, checked: this.list[index].checked })                    console.log(this.list, 'this.list---')                },            }        })    </script></body></html>