vue 异步调用,无法获得数组长度的问题

问题:
由于get_roles方法存在处理时间长的问题,总是导致页面显示的时候,有显示不出来穿梭狂后面框里面内容的问题,经过2天的努力,终于找到原因,原来是异步调用的问题,需要设置等待时间,哎,一个简单的问题,搞了好些天:结果setTimeout 一个函数搞定;
完整代码:

<style lang="less">
@import "../../styles/common.less";
@import "./roles-edit.less";
</style>

<template>
  <Card>
    <p slot="title" align="center">{{ title }}</p>
    <Row>
      <Form
        ref="formdata"
        :model="formdata"
        :rules="ruleValidate"
        :label-width="80"
      >
        <Row :gutter="16">
          <Col span="12">
            <FormItem label="角色名称" prop="name">
              <Input v-model="formdata.name" placeholder="角色名称英文">
                {{ formdata.name }}
              </Input>
            </FormItem>
          </Col>
          <Col span="8">
            <div style="font-size: 12px; color: #c5c8ce">
              不超过64个字符,允许英文字母、数字,或"-",不可为中文
            </div>
          </Col>
        </Row>
        <Row :gutter="16">
          <Col span="12">
            <FormItem label="备注信息" prop="note">
              <Input v-model="formdata.note" placeholder="角色用途说明">
                {{ formdata.note }}
              </Input>
            </FormItem>
          </Col>
          <Col span="8">
            <div style="font-size: 12px; color: #c5c8ce">
              不超过64个字符,允许中英文字符、数字,或"-",
            </div>
          </Col>
        </Row>

        <FormItem label="权限信息" prop="permissions">
          <Transfer
            :titles="permissions_title"
            :data="all_permissions"
            :target-keys="permissionKeys"
            :list-style="listStyle"
            :render-format="render1"
            @on-change="handleChange"
          ></Transfer>
        </FormItem>

        <FormItem>
          <Button
            type="primary"
            style="width: 100px; text-align: center"
            @click="submit(_id, formdata)"
            >提交</Button
          >
        </FormItem>
      </Form>
    </Row>
  </Card>
</template>
<script>
import Cookies from "js-cookie";
import { get_roles, post_roles, get_permission2 } from "@/api/oms_server";
export default {
  name: "rule",
  data() {
    return {
      _id: "",
      title: "",
      permissions_title: ["所有权限列表", "当前权限列表"],
      all_permissions: [], // 权限表中的可供分配的所有权限
      permissionKeys: [], // 设置给当前角色的权限所对应的key,取的是表中的id
      listStyle: {
        // 设置给穿梭框的规格大小
        width: "400px",
        height: "500px",
      },
      // 表单数据,表单数据主要包含
      formdata: {
        name: "",
        permissions: [],
        note: "",
      },
      //校验
      ruleValidate: {
        name: [
          {
            required: true,
            message: "角色名称不能为空",
            trigger: "blur",
          },
        ],
        note: [
          {
            required: true,
            message: "备注说明不能为空",
            trigger: "blur",
          },
        ],
      },
    };
  },
  methods: {
    init() {
      //如果是编辑模式,需要获得对应的role,以及对应的role所具有的权限
      this.all_permissions = this.getPermissions();
      let _id = this.$route.query._id;
      this._id = _id;
      //找到编辑所在的role
      setTimeout(() => {
        get_roles(null, null)
          .then((response) => {
            response.data.data.every((v, i) => {
              if (v._id == this._id) {
                this.formdata = v;
                this.formdata.permissions.forEach((v1, i1, arr) => {
                  this.all_permissions.forEach((v2, i2, arr2) => {
                    if (v2.label == v1) {
                      this.permissionKeys.push(v2.key);
                    }
                  });
                });
              }
            });
          })
          .catch((error) => {
            console.log(error);
          })
          .finally(() => {
            this.title = this._id
              ? "角色更新[" + this.formdata.name + "]"
              : "角色新增";
          });
      }, 100);

      // 通过role对应的权限,获得该权限对应的_id,this.formdata.permissions为角色对应的权限数组
    },
    getPermissions() {
      var pers = [];
      // pers.length = 10;
      get_permission2()
        .then((response) => {
          response.data.data.forEach((v, i, arr) => {
            if (v.name && v.name != "") {
              pers.push({
                key: v._id.toString(),
                label: v.name, //权限名
                description: v.cname,
              });
            }
          });
        })
        .catch((error) => {
          this.$Message.error(error);
          console.log("error", error);
        });
      return pers;
    },
    render1(item) {
      return item.label + " - " + item.description;
    },
    handleChange(newTargetKeys, direction, moveKeys) {
      this.permissionKeys = newTargetKeys;
    },
    submit(id, data) {
      this.formdata.permissions.length = 0;
      for (let i = 0; i < this.permissionKeys.length; i++) {
        for (let j = 0; j < this.all_permissions.length; j++) {
          if (
            this.all_permissions[j]["key"].indexOf(this.permissionKeys[i]) >= 0
          ) {
            this.formdata.permissions.push(this.all_permissions[j]["label"]);
          }
        }
      }
      post_roles(id, data)
        .then((response) => {
          this.$Message.success("数据修改成功.");
          this.$router.push({
            name: "roles_index",
          });
        })
        .catch((error) => {
          this.$Message.error(error);
          console.log("error", error);
        })
        .finally(() => {
          console.log("submit", data);
        });
    },
  },

  mounted() {
    this.init();
  },
  // watch: {
  //   $route() {
  //     this.init();
  //   },
  // },
};
</script>


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容