Возвращаемое значение обратного вызова компонента Vue, сделайте ваш код более кратким

Vue.js

причина

Недавно столкнулся с такой потребностью при написании бизнес-кода компании, нужно добавить новое всплывающее окно для написания этой части для вторичного подтверждения. Используемая библиотека компонентов — старая версия ant desgin vue 1.2.4. В этой библиотеке компонентов нет способа настроить html-часть, как в методе $confirm elementUI. Но мой контент на самом деле очень мал.

Если вы используете традиционный метод вторичного подтверждения непосредственного написания всплывающего окна

Недостаток 1: бизнес-кода станет много

Недостаток 2: я добавляю перехват интерфейса на основе того, что сделали другие, а параметры передаются в другую функцию. Чтобы использовать компонент всплывающего окна, вам нужно определить функции отмены и закрытия, и я должен кинуть исходно собранные данные в файл global. Потом после подтверждения забрать обратно из глобалки и закинуть обратно.

Если моя инкапсуляция компонента может быть похожа на метод функции обратного вызова $confirm или метод primose, то параметры не будут перебрасываться, и функция может быть написана меньше. Кода можно написать вдвое меньше.

На самом деле, я уже писал подобный пакет в прошлом, и это было, когда я писал небольшую программу. Но я давно не писал, поэтому забыл. Не смирился, потом вернулся в субботу попробовать. удалось

предполагает знание

1. Обнаружение грязных данных данных

2. Функция обратного вызова

3. Метод передачи данных Vue

Первый: метод мониторинга данных

Здесь всплывающее окно elementUI используется для упрощения

Обоснование исходит из этой ранней части меня:nuggets.capable/post/684490…

способ мониторинга данных


1. Часть кода всплывающего окна

<template>
  <el-dialog title="提示" :visible.sync="dialogVisible" width="30%">
    <span>这是一段信息</span>
    <span slot="footer" class="dialog-footer">
      <el-button @click="colse">取 消</el-button>
      <el-button type="primary" @click="colse">确 定</el-button>
    </span>
  </el-dialog>
</template>

<script>
export default {
  data() {
    return {
      dialogVisible: false
    };
  },
  methods: {
    confirm() {
      this.dialogVisible = true;
    },
    colse() {
      this.dialogVisible = false;
      if (this.callback != null) {
        this.callback(false);
      }
    },
    coloseWin(callback) {
      this.callback = callback;
    }
  }
};
</script>

2. Используйте часть

<template>
  <div class="test">
    <el-button @click="ceshi">测试</el-button>
    <DialogConfirm ref="DialogConfirm" />
  </div>
</template>

<script>
export default {
  data() {
    return {};
  },
  created() {},
  components: {
    DialogConfirm: () =>
      import("@/backstage/components/dialog_confirm/dialogConfirm.vue")
  },
  methods: {
    ceshi() {
      const Confirm = this.$refs["DialogConfirm"];
      Confirm.confirm();
      Confirm.coloseWin(e => {
        console.log(e);
      });
    }
  }
};



Второй: метод обещания

1. Измените всплывающее окно на это

<template>
  <el-dialog title="提示" :visible.sync="dialogVisible" width="30%">
    <span>这是一段信息</span>
    <span slot="footer" class="dialog-footer">
      <el-button @click="colse">取 消</el-button>
      <el-button type="primary" @click="queding">确 定</el-button>
    </span>
  </el-dialog>
</template>

<script>
export default {
  data() {
    return {
      dialogVisible: false
    };
  },
  methods: {
    confirm() {
      this.dialogVisible = true;
      return new Promise((resolve, reject) => {
        this.resolve = resolve;
        this.reject = reject;
      });
    },
    colse() {
      this.dialogVisible = false;
      this.resolve(111);
    },
    queding() {
      this.dialogVisible = false;
      this.reject(true);
    }
  }
};
</script>

2. Используйте часть кода

<template>
  <div class="test">
    <el-button @click="ceshi">测试</el-button>
    <DialogConfirm ref="DialogConfirm" />
  </div>
</template>

<script>
export default {
  data() {
    return {};
  },
  created() {},
  components: {
    DialogConfirm: () =>
      import("@/backstage/components/dialog_confirm/dialogConfirm.vue")
  },
  methods: {
    ceshi() {
      const Confirm = this.$refs["DialogConfirm"];
      Confirm.confirm()
        .then(e => {
          console.log(e);
        })
        .catch(e => {
          console.log(e);
        });
    }
  }
};
</script>