首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >复选框列表不会在动态生成的复选框数组v-model中更新

复选框列表不会在动态生成的复选框数组v-model中更新
EN

Stack Overflow用户
提问于 2020-09-10 22:49:22
回答 2查看 83关注 0票数 1

我有一个包含复选框列表的键->值对的数组。它们呈现得很好,但是当你点击它们时什么也不会发生,除非我改变了一个文本输入,然后这些复选框被重新呈现为新的值(我之前点击的那个)。

复选框:

代码语言:javascript
运行
复制
<el-col :span="24">
   <el-form-item class="permission-item" :span="24" :key="perm.name" v-for="perm in permissions" :label="perm.name">
       <el-switch v-model="role_permissions[perm.name]" />
   </el-form-item>
</el-col>

其他元素,如果我更新,复选框也会更新:

代码语言:javascript
运行
复制
<el-col :span="8">
  <el-row>
    <el-col :span="24">
        <el-form-item label="Role Name" prop="name">
          <el-input v-model="role.name"/>
        </el-form-item>
    </el-col>
  </el-row>
</el-col>

组件:

代码语言:javascript
运行
复制
export default {
    data() {
      return {
        role: this.role,
        permissions: [],
        role_permissions: {}
      };
    },
    methods: {
      getRole: async function(){
        //Inside axios ajax
        this.role = response.data.role;
      },
      getPermissions: async function(){
        //Inside axios ajax   
        this.permissions = response.data.permissions;          

        //Init the array with the values
        for(var i = 0; i < this.permissions.length; i++){
          this.role_permissions[this.permissions[i].name] = this.hasPerm(this.permissions[i].name);
        }        
      },
      hasPerm(name){
        for(var i = 0; i < this.role.permissions.length; i++){
          if(name === this.role.permissions[i].name){
            return true;
          }
        }
        return false;
      }
    },
    mounted() {
      this.getRole();
      this.getPermissions();
    },
  }

有人能告诉我为什么会发生这种情况吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-09-15 00:51:20

在查看了几天的反应性问题后,修复结果如下:

改变这一点

代码语言:javascript
运行
复制
role_permissions: {}

要这样做:

代码语言:javascript
运行
复制
role_permissions: []

然后,这不起作用的关键部分是在数组的初始化中。这发生在getPermissions()中,下面是我所做的:

更改了此设置:

代码语言:javascript
运行
复制
for(var i = 0; i < this.permissions.length; i++){
   this.role_permissions[this.permissions[i].name] = this.hasPerm(this.permissions[i].name);
}   

要这样做:

代码语言:javascript
运行
复制
for(var i = 0; i < this.permissions.length; i++){
   this.$set(this.role_permissions, this.permissions[i].name, this.hasPerm(this.permissions[i].name));
}

使用"$set“进行赋值,而不是使用"=”。

票数 0
EN

Stack Overflow用户

发布于 2020-09-10 23:19:24

在switch标记中同时使用v-model和bind:value

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63832271

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档