社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
最近在开发工作流,也不能说开发吧,公司有一套工作流的代码,我只是个搬运工,转化为vue项目!不得不说,真不容易,原谅我曾经的年少无知,竟然在技术总监面前,夸下海口说这个简单(搬代码嘛)!
开始把html拷贝到自己创建的flow.vue页面,把css丢到assets文件夹下,js丢到static文件夹下,然后麻烦点来了,js怎么引入;
export暴露出来然后import引入?index.html中用script引入?
不好意思,都gg,export暴露不出来,因为一个js中不仅有变量还有方法,还有自调用等等,我想暴露出来都无从下手;直接在index引入报错,原因是需要获取flow.vue页面的一些变量,而你如果在index直接引入了,js先加载了,那这些变量肯定找不到,就报错了!
解决办法:加载完flow.vue的dom之后再引入那些js;
自己建一个文件夹,里面放上这段代码,然后在flow.vue页面引入这个js,因为这个js只能是一个一个的传进去,所以你有多少个js,就要调用多少次,code是一个标识,比如你的是jquery,code标识你可以写为jq,随意!这个的作用只是为了重复加载,url就是你js文件的路径
// 加载js
let scriptLoaded = {}
export function loadScript(code, url) {
return new Promise((resolve, reject) => {
if (typeof scriptLoaded[code] === "undefined") {
let script = document.createElement("script")
script.src = url
document.body.appendChild(script)
script.onload = function() {
scriptLoaded[code] = true
resolve({code})
}
script.onerror = function(error) {
reject(error)
}
} else {
resolve()
}
})
}
我这里分成三个数组是因为有些js存在依赖关系,比如说,我a.js中定义了一个变量,然后b.js用到了,c.js也用到了,那这时候,我应该等a.js先加载完,不然b跟c就会报错,(顺带一提,这个变量要定义为全局=>window.xxx);上面说的当前页的变量,如果这些js文件要用到,也要定义为全局变量;
promise.all()能监听promise任务完成的数组,所有任务都执行完之后就会返回resolve;所以当js跟js直接只有一方依赖某个js的时候,promise.all()是个很好的方法;
在.then(res =>{})回调中写你成功执行完后要执行的代码就可以了;
写的有些乱,毕竟还描述了项目的东西!原项目什么vue、react之类的框架都没用,只是用了jq、js还有一些ui框架,还有就是流程框架!也不知道迭代了多少个版本了!不要说把它的方法用vue写法写一下就好,十多个js,几乎都存在依赖关系,最少的有五百多行代码,最多的上万行,不是我这种小菜鸡想用vue写法转一转就能转的,而且不太了解以前的人的思路,就两天时间,我也只能解决这么多了!
项目中还遇到一个问题,有两个js是相互调用彼此的变量的关系,先加载哪一个都不行,另外一个会报错;最后实在找不到解决办法,只能把两个js代码合成一个了,做法很low,但是东西实现了!如果有人知道其他的解决办法,请告诉我,跪谢啊啊啊啊!
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!