首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在vue中对嵌套在数据实例中的对象数组中的数组进行建模

如何在vue中对嵌套在数据实例中的对象数组中的数组进行建模
EN

Stack Overflow用户
提问于 2020-11-03 01:58:11
回答 1查看 79关注 0票数 0

我有一个显示项和子项列表的循环。响应有效负载如下所示。

我已经成功地循环了,并且我在我的前端脚手架上显示如下:

我纠结于如何在我的数据实例中正确地对此进行建模,同时仍然维护每个组的完整性(在本例中是绑定到它的A权限和子权限)。发送到后端的负载预期如下:

EN

回答 1

Stack Overflow用户

发布于 2020-11-09 17:40:06

显然,对复杂结构进行“建模”的关键是避免“v-模型”;因为v-模型是两个独立属性的语法糖(根据输入的不同而不同),它的语法糖用于checked@change,用于文本输入它的值和@input,等等。

然而,这种回应在某种程度上是针对所提出的问题而定制的,并且是由guanzo提供的。而不是在这种情况下使用V模型进行建模或绑定。函数被用来实现这一点。

代码语言:javascript
运行
复制
isPermissionChecked(pName) {
      return this.selected.some((p) => p.name === pName);
    },
    togglePermission(pName, event) {
      const isChecked = event.target.checked;
      if (isChecked) {
        this.selected.push({ name: pName, sub_permissions: [] });
      } else {
        const i = this.selected.findIndex((p) => p.name === pName);
        this.selected.splice(i, 1);
      }
    },
    isSubPermissionChecked(pName, spName) {
      const permission = this.selected.find((p) => p.name === pName);
      return (
        permission && permission.sub_permissions.some((sp) => sp === spName)
      );
    },
    toggleSubPermission(pName, spName, event) {
      const isChecked = event.target.checked;
      const permission = this.selected.find((p) => p.name === pName);
      if (isChecked) {
        permission.sub_permissions.push(spName);
      } else {
        const i = permission.sub_permissions.findIndex((sp) => sp === spName);
        permission.sub_permissions.splice(i, 1);
      }
    },

这些被“建模”到输入中,如下所示:

代码语言:javascript
运行
复制
<div v-for="p in permissions" :key="p.name" class="card">
        <div class="form-grop d-flex align-items-center radio-group1">
          <div class="mr-auto">
            <input
              type="checkbox"
              :id="p.name"
              :checked="isPermissionChecked(p.name)"
              @change="togglePermission(p.name, $event)"
              class="mt-2"
            />
            <label :for="p.name" class="mx-2 mt-2">{{ p.name }}</label>
          </div>
          <div>
      </div>

代码语言:javascript
运行
复制
   <div class="mr-auto" v-for="sp in p.sub_permissions" :key="sp">
              <input
                type="checkbox"
                :id="p.name + sp"
                :disabled="!isPermissionChecked(p.name)"
                :checked="isSubPermissionChecked(p.name, sp)"
                @change="toggleSubPermission(p.name, sp, $event)"
                class="mt-2"
              />
              <label :for="p.name + sp" class="mx-2 mt-2">{{ sp }}</label>
            </div>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64650795

复制
相关文章

相似问题

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