JsUtil.js 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. /**
  2. * 动态加载js模块
  3. * @param {*} jsUrl js文件的路径
  4. * @return promise对象
  5. */
  6. let dynamicLoadJsModule = function(jsUrl){
  7. let promise = null;
  8. // 注意:在webpack中直接使用import(url).then()会错误的解析url。
  9. // 如果url是静态的值,举例'xxx.js', webpack打包的时候,会去src对应的目录下面找js文件。
  10. // 如果url是变量,举例const url = '', webpack打包的时候,原理不清晰...,测试结果时浏览器不会发出http请求加载后端的js文件。
  11. let command = `
  12. promise = new Promise((resolve, reject) => {
  13. import('${jsUrl}').then(remoteComponent => {
  14. resolve(remoteComponent);
  15. }).catch(error => {
  16. reject(error);
  17. });
  18. });
  19. `;
  20. eval(command);
  21. return promise;
  22. };
  23. /**
  24. * 动态加载js模块中的方法
  25. * @param {*} jsUrl js文件的路径
  26. * @param {*} functionName js方法中的名称
  27. * @return promise对象
  28. */
  29. let dynamicLoadJsFunction = function(jsUrl, functionName){
  30. let promise0 = dynamicLoadJsModule(jsUrl);
  31. let promise1 = new Promise((resolve, reject) => {
  32. promise0.then(remoteComponent => {
  33. let targetFunction = remoteComponent[functionName];
  34. resolve(targetFunction);
  35. }, errorData => {
  36. reject.error(errorData);
  37. });
  38. });
  39. return promise1;
  40. };
  41. export default {
  42. dynamicLoadJsModule,
  43. dynamicLoadJsFunction,
  44. };