因为我们知道vue项目打包完成后,就是一个index.html

我们在jquery项目中使用iframe嵌入vue项目

1.创建vue项目,根据路由写页面

2.将vue打包后的dist文件夹,复制到你的jquery目录下

3.配的地址跟自己vue项目访问地址一致即可,例如:“traffic/#/notice”

var html = '<div id="item' + gridItemIndex + '" class="item" style="background-color:#fff;">' +

                '<div class="item-content"><iframe width="' + awidth + '" height="' + aheight + '" id="itemIframe' + gridItemIndex + '" src="' + moduleUrl + '" frameborder="0"></iframe></div></div>';

            $('.grid').append(html);

4.然后将项目包丢给后台即可,或者让后台将地址指向你的环境,类似于(我的任务,日程,公告都是vue)

当开发过程中,常见问题

1.需要开发的过程中实时查看在jquery的项目中vue的页面情况,直接将地址指全(指向vue访问地址)

obj.moduleUrl=‘traffic/#/notice’ || ‘traffic/#/myTask’ || ···

var moduleUrl = 'http://ip:port/' + obj.moduleUrl

但是这样会遇到问题:当你需要取父页面在localstorage中的数据时,取不到,出现跨域

                                    当你接口请求时,也会出现跨域

这时候需要后台协助,或者你本地自己起了ngnix,(配个地址即可)

location ^~ /traffic/{
#alias D:/workspace/portal/dyportalweb/webapp/;
proxy_pass http://ip:port/;
#alias C:/Users/Administrator/Desktop/dyportalweb/;
expires 5d;
}

我们在vue.config.js需要配置

devServer: {
    open: process.platform === "darwin",
    host: "自己的ip",
    port: 自己的端口,
    https: false,
    hotOnly: false,
    proxy: {
      "/gateway": {
        target: "http://ip:port/",
        ws: true,
        changeOrigin: true,
        pathRewrite: {
          // '^/gateway': '/gateway',
          //   '^/gateway': ''
        }
      }
    },
    historyApiFallback: true,
    disableHostCheck: true,
    before: () => {}
  }

取值例如

2.我们vue是根据路由来判断进入那个页面的,有些公共参数是分页面请求的,vue项目嵌入iframe中,用watch监听发现from是空的,to才是你需要的路由信息(mouted中获取的路由this.$route.meta是undefined,而且组件的mouted方法先走导致报错)

所以我们使用watch监听路由变化根据meta信息判断请求数据,有数据再去渲染组件

 watch: {
    $route(to, from) {
      if (to.meta.isTask){
        this.initSwitch()
        this.getUrlByCode()
      }else{
        this.pageReady = true
      }
    },
  },
<router-view v-if="pageReady" />

 

Logo

前往低代码交流专区

更多推荐