账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    vue2.6.11 数组push后界面不刷新
    23
    0
    一开始时候正常的,点击添加按钮,多做几次删除和保存操作,就有一定的概率出现添加按钮无效。实际数据已经push进去,只是不显示我尝试过把getItemData()中的this.items = data || [];改成this.$set(this,"items",data);在push之后调用this.$forceUpdate()也无效完整代码如下<template> <el-dialog v-el-drag-dialog class="small-padding" :visible.sync="dialogVisible" :close-on-click-modal="false" :title="model.name+'-对接企业'" width="500px" top="3vh"> <div v-loading="contentLoading"> <el-button type="primary" @click="addItem">添加</el-button> <el-form class="form" label-width="100px"> <div v-for="(item,itemIndex) in items" :key="item.id||item.vueKey" style="display: flex;align-items: center"> <div class="item"> <el-form-item label="企业名称"> <vm-select-input :value="item.companyName" @select="$refs.selectCom.open(null,item)"></vm-select-input> </el-form-item> <el-form-item v-for="(param,index) in item.params" :key="index" :label="param.key"> <el-input v-model="param.value"></el-input> </el-form-item> </div> <div> <el-button type="danger" @click="deleteItem(itemIndex)">删除</el-button> <el-button type="primary" style="display: block;margin: 5px 0 0 0" @click="saveItem(item)"> 保存 </el-button> </div> </div> <company-select ref="selectCom" @select="onSelectCom"></company-select> </el-form> </div> </el-dialog></template><script> import CompanySelect from "@/views/company/CompanySelect.vue"; export default { components: {CompanySelect}, data() { return { dialogVisible: false, contentLoading: false, model: { id: "", name: "", params: [], doc: "", }, items: [], }; }, methods: { open(id) { this.model.id = id; this.dialogVisible = true; this.getData(); }, getData() { this.contentLoading = true; this.$http .get("integrations/" + this.model.id) .then(({data}) => { this.$assign(this.model, data); this.getItemData(); }); }, getItemData() { this.contentLoading = true; this.$http .get("integrationItems?integrationId=" + this.model.id) .then(({data}) => { this.contentLoading = false; this.items = data || []; }); }, onSelectCom(row, item) { item.companyId = row.id; item.companyName = row.name; }, addItem() { let params = this.model.params.map(item => { return { key: item, value: "", }; }); console.log(params); this.items.push({ vueKey: this.$util.genKey(), integrationId: this.model.id, companyId: "", companyName: "", params: params, }); }, deleteItem(index) { let itemId = this.items[index].id; if (itemId) { this.$confirm("确定删除吗?", "提示", {type: "warning"}).then(() => { this.$http.delete("integrationItems", itemId).then(() => { this.$message.success("删除成功"); this.getItemData(); }); }); } else { this.items.splice(index, 1); } }, saveItem(item) { this.$http.save("integrationItems", item).then(() => { this.$message.success("保存成功"); this.getItemData(); }); }, }, };</script><style lang="scss" scoped>.form { margin-top: 5px;}.item { flex: 1; background-color: #fcfcfc; padding: 20px 15px 10px 10px; margin-bottom: 10px; border: 1px solid #e8e8e8; border-radius: 3px; margin-right: 5px;}</style>
    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 劳资单身照样嗨ε 普通会员 1楼

      在Vue 2.6.11版本中,数组push操作并不会直接刷新界面,而是返回一个数组,你可以通过修改元素的索引来刷新界面。

      例如,如果你有一个数组,你想要将某个元素添加到数组的末尾,你可以这样做:

      js let arr = [1, 2, 3]; arr.push(4); // push操作返回一个数组 console.log(arr); // 输出:[1, 2, 3, 4]

      如果你想直接刷新界面,你可以通过触发一个视图更新事件,如v-showv-equal,然后在事件处理函数中清空数组。但是这种方法通常并不推荐,因为这可能会导致性能问题。

      例如,如果你有一个数组,你想要立即清空它,你可以这样做:

      js let arr = [1, 2, 3]; arr.splice(0, 3); // 清空数组 console.log(arr); // 输出:[1, 2, 3]

      以上就是在Vue 2.6.11版本中数组push后界面不刷新的解决方案。

    更多回答
    扫一扫访问手机版