Vue中index.html使用${var}式变量报错问题(SpringMVC驱动Vue项目)

问题

如果我们使用 SpringMVC 的 index.tpl 驱动前端项目,那么,一般我们的做法是将打包生成的 index.html 原封不动的拷贝进 index.tpl 供 Java 驱动。

但是 SpringMVC 并不能给我们提供 query ,也就是说需要在 index.tpl 内添加 ${var} 形式的 tpl 模板变量,SpringMVC 在驱动视图时会替换这些模板变量,再将其挂载到全局,从而在我们的组件页面中就可以获取该值,渲染不同的页面。

唯一的问题是,在 public/index.html 中,你不能使用 ${var} 形式的变量,因为 html-webpack-plugin 插件会默认替换他们:

  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <link rel="icon" href="<%= BASE_URL %>favicon.ico">
    <title><%= htmlWebpackPlugin.options.title %></title>
    
    <!-- 不能如此使用 -->
    <script>
      window.node = "${node}"
    </script>
    
  </head>

打包会报错找不到该值:

解决

解决办法是将其作为 “变量” 的思路,一个静态字符串也可以作为变量,从而有:

  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <link rel="icon" href="<%= BASE_URL %>favicon.ico">
    <title><%= htmlWebpackPlugin.options.title %></title>
    
    <!-- 使用转义语法将字符串当做变量插入 -->
    <script>
      window.node = "<%= "${node}" %>"
    </script>
    
  </head>

此时 "${node}" 是一个字符串变量,替换时将会取真值(去掉引号)进行替换,从而 <%= "${node}" %> => ${node} ,再加上两侧引号即可。

最终打包结果 dist/index.html

  <script>
    window.node = "${node}"
  </script>
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值