最近在开发一个性能:有一个赠品弹层,外面能够抉择赠品,点击确定,可将选中的赠品展现在页面上。页面上的赠品列表有删除按钮,能够删除对应的数据,并且赠品弹层对应的那条数据勾销选中。
上面是代码:

<!DOCTYPE html><html><head>  <meta charset="utf-8">  <title>element-ui开发: 选中赠品弹层中的数据并展现在页面上,弹层展现选中状态</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">    <el-button type="primary" @click="addGiftFun">增加赠品</el-button>    <div v-if="livGiftList.length > 0">      <el-table :data="livGiftList" border style="width: 500px">        <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">          <template slot-scope="scope">            <el-button @click="delGiftFun(scope.$index, livGiftList)">删除</el-button>          </template>        </el-table-column>      </el-table>    </div>    <el-dialog title="请抉择赠品" :close-on-click-modal="false" :visible.sync="isShow" width="500px">      <el-table :data="giftProdctList" border style="width: 500px">        <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="80">          <template slot-scope="{ row }">            <span>{{ row.price }}</span>          </template>        </el-table-column>        <el-table-column label="操作" align="center" min-width="60">          <template slot-scope="{ row }">            <el-checkbox v-model="row.checked">{{              row.checked ? "已抉择" : "抉择"              }}</el-checkbox>          </template>        </el-table-column>      </el-table>      <div slot="footer" class="footer">        <el-button class="cancel-style" size="small" @click="isShow = false">取 消</el-button>        <el-button type="primary" @click="submitFun">确 认</el-button>      </div>    </el-dialog>  </div>  <script>    new Vue({      el: '#app',      data() {        return {          // 管制弹层显示和暗藏          isShow: false,          // 页面上展现的赠品列表          livGiftList: [],          // 模仿赠品列表ajax数据          giftProdctListCopy: [            {              name: "测试1",              price: 1,              id: 1            },            {              name: "测试2",              price: 10,              id: 2            },            {              name: "测试3",              price: 9,              id: 3            },            {              name: "测试4",              price: 3,              id: 4            },          ],          // 赠品弹层          giftProdctList: []        }      },      methods: {        // 增加赠品按钮        addGiftFun() {          this.isShow = true;          let checkedList = this.livGiftList;          // 获取到页面展现的赠品列表,拿到赠品id汇合          checkedId = checkedList.map((item) => {            return item.id          })          // 模仿ajax申请: JSON.parse(JSON.stringify(this.giftProdctListCopy))          // 渲染赠品弹层数据并且高亮被选中的赠品          this.giftProdctList = JSON.parse(JSON.stringify(this.giftProdctListCopy)).map((item) => ({            ...item,            // 高亮被选中的赠品            checked: checkedId.includes(item.id)          }));          console.log(this.giftProdctList, 'giftProdctList')        },        // 赠品弹层点击确认        submitFun() {          this.isShow = false;          this.livGiftList = this.giftProdctList.filter((item) => {            return item.checked;          })          console.log(this.livGiftList, 'this.livGiftList')        },        // 删除赠品        delGiftFun(index, row) {          row.splice(index, 1)        },      }    })  </script></body></html>