gpt4 book ai didi

javascript - 使用 promise 渲染 Vue 应用程序,并等待用户输入

转载 作者:搜寻专家 更新时间:2023-10-30 22:37:32 28 4
gpt4 key购买 nike

我有一个设计问题,我目前有一个逻辑繁重的 JS 脚本,我将其编写为各种 promise 并创建了如下结构:

init()
.then(result => doSomethingA(result))
.then(result => doSomethingB(result))
.then(result => loadVueApp(result))

现在 loadVueApp() 函数调用执行以下操作:

new Vue({
el : '#app',
render : h => h(App)
});

呈现我的 Vue 应用程序,然后用户可以与该应用程序交互,转到各种屏幕,进行选择,我将这些选择存储在全局 EventBus 类型的组件中。

现在我的问题是,我应该如何将用户的选择传递回我的 promise 之塔?我应该这样做吗?

我可以根据出现的应用程序立即解析 loadVueApp,然后再对逻辑繁重的脚本进行函数调用 - 但这感觉不那么干净。

有什么想法吗?

提前致谢。

最佳答案

这是一个执行以下操作的简单示例:

  • Vue 组件从模板实例化并附加到 <body>元素,而不是来自现有的 DOM 元素(如果您不希望 UI 最初可见)。
  • promise 仅在单击提交按钮时使用输入的文本进行解析。组件实例被销毁并从 DOM 中移除。

const InputUI = {
template: '#input-ui',
data() {
return {
value: '',
};
},
};

function getInput() {
return new Promise(resolve => {
const inputUI = new Vue(InputUI);

inputUI.$once('submit', value => {
inputUI.$destroy();
inputUI.$el.remove();
resolve(value);
});

inputUI.$mount();
document.body.appendChild(inputUI.$el);
});
}

getInput().then(value => alert(value));
<script src="https://rawgit.com/vuejs/vue/dev/dist/vue.js"></script>

<template id="input-ui">
<div>
<input v-model="value">
<button @click="$emit('submit', value)">Submit</button>
</div>
</template>

如果您使用的是单文件组件,您的代码结构应类似于这样:

InputUI.vue

<template>
<div>
<input v-model="value">
<button @click="$emit('submit', value)">Submit</button>
</div>
</template>

<script>

export default {
data() {
return {
value: '',
};
},
};

</script>

ma​​in.js

import Vue from 'vue';
import InputUI from './InputUI.vue';

function getInput() {
return new Promise(resolve => {
const InputUIVue = Vue.extend(InputUI);
const inputUI = new InputUIVue();

inputUI.$once('submit', value => {
inputUI.$destroy();
inputUI.$el.remove();
resolve(value);
});

inputUI.$mount();
document.body.appendChild(inputUI.$el);
});
}

getInput().then(value => alert(value));

关于javascript - 使用 promise 渲染 Vue 应用程序,并等待用户输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50306236/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com