Javascript 使用承诺呈现Vue应用程序,并等待用户输入
我有一个设计问题,我目前有一个逻辑性很强的JS脚本,我写了很多承诺,并创建了如下结构:Javascript 使用承诺呈现Vue应用程序,并等待用户输入,javascript,vue.js,vuejs2,frontend,Javascript,Vue.js,Vuejs2,Frontend,我有一个设计问题,我目前有一个逻辑性很强的JS脚本,我写了很多承诺,并创建了如下结构: init() .then(result => doSomethingA(result)) .then(result => doSomethingB(result)) .then(result => loadVueApp(result)) 现在,loadVueApp()函数调用执行以下操作: new Vue({ el : '#app', render : h
init()
.then(result => doSomethingA(result))
.then(result => doSomethingB(result))
.then(result => loadVueApp(result))
现在,loadVueApp()
函数调用执行以下操作:
new Vue({
el : '#app',
render : h => h(App)
});
它呈现我的Vue应用程序,然后用户可以与该应用程序交互,进入各种屏幕,进行选择,我将这些选择存储在全局EventBus
类型组件中
现在我的问题是,我应该如何将用户的选择传递回我的承诺之塔?我应该这么做吗
我可以根据出现的应用程序立即解析loadVueApp
,然后再对逻辑繁重的脚本进行函数调用,但这感觉并不干净
有什么想法吗
提前感谢。下面是一个简单的示例,它可以实现以下功能:
new Vue({
el : '#app',
render : h => h(App)
});
- Vue组件从模板实例化并附加到
元素,而不是从现有的DOM元素(如果您不希望UI最初可见) - 只有在单击提交按钮时,承诺才会通过输入的文本进行解析。组件实例将被销毁并从DOM中删除
const InputUI={
模板:“#输入ui”,
数据(){
返回{
值:“”,
};
},
};
函数getInput(){
返回新承诺(解决=>{
常量输入=新的Vue(输入);
inputUI.$once('submit',值=>{
inputUI.$destroy();
inputUI.$el.remove();
决心(价值);
});
输入。$mount();
document.body.appendChild(inputUI.$el);
});
}
getInput()。然后(值=>警报(值))代码>
提交
为什么要将数据传递回承诺链,除非只有在做出选择并销毁Vue组件后,loadVueApp
才能解析?(是这样吗?否则,你为什么要像那样将承诺串联起来?)是的,这就是我想要做的-在用户做出选择并关闭应用程序之前保持承诺未解决。感谢此解决方案,它看起来不错-但这需要手动编译或使用渲染功能。我使用的是单文件组件。我没有使用渲染函数,我的示例中没有任何内容不能转换为单文件组件。从文档:但是,如果您依赖于以现有内容作为模板(使用el选项)装载到元素,您仍然会受到这些限制。
如果可能的话,我希望避免添加编译器,或者我遗漏了什么?我的答案以这种方式编写的唯一原因是使其可以在线运行。要使其成为单个文件组件,您只需将
和组件定义代码正常地放入.vue文件中(并删除模板:“#输入ui”
)。其他一切都是一样的。嗯,对不起@Texa Moon,不确定我做错了什么:-组件模板需要根元素,而不仅仅是文本。
但是如果我删除对模板的引用,调用new Vue()
如何知道从哪里获取HTML?