You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改Vue.js的分隔符以避免与Laravel冲突?

解决Vue.js与Laravel模板分隔符冲突的方法

这个问题我之前也碰到过,Blade和Vue默认都用{{ }}作为模板分隔符,导致Blade会优先解析Vue的变量,进而引发错误。这里给你几个实用的解决办法,按需选择就行:

方法一:全局/局部修改Vue的分隔符

你可以在初始化Vue实例或者定义组件时,通过delimiters选项替换Vue的默认分隔符,比如改成[[ ]]这类不会和Blade冲突的符号。

示例1:修改单个组件的分隔符

在你的grid.js组件代码里添加delimiters配置:

Vue.component('demo-grid', {
  // 替换Vue的分隔符为[[ 和 ]]
  delimiters: ['[[', ']]'],
  template: '#grid-template',
  data() {
    return {
      sortKey: '',
      sortOrders: {},
      gridData: [/* 你的数据内容 */],
      gridColumns: ['name', 'age', 'email']
    }
  },
  // 组件其他方法逻辑...
})

然后把模板里的{{ }}替换成新的分隔符:

<script type="text/x-template" id="grid-template">
  <table v-if="filteredData.length">
    <thead>
      <tr>
        <th v-for="key in columns" @click="sortBy(key)" :class="{ active: sortKey == key }">
          [[ key | capitalize ]]
          <span class="arrow" :class="sortOrders[key] > 0 ? 'asc' : 'dsc'"></span>
        </th>
      </tr>
    </thead>
    <tbody>
      <tr v-for="entry in filteredData">
        <td v-for="key in columns">
          [[ entry[key] ]]
        </td>
      </tr>
    </tbody>
  </table>
  <p v-else>No matches found.</p>
</script>

示例2:全局修改Vue分隔符

如果整个项目都需要替换,在根Vue实例初始化时配置:

new Vue({
  el: '#app',
  delimiters: ['[[', ']]'],
  // 其他全局配置...
})

方法二:使用Blade的@verbatim指令

如果你不想修改Vue的语法,可以用Blade的@verbatim指令包裹Vue的代码块,这样Blade会跳过对这段代码的解析,直接交给Vue处理:

@verbatim
<div id="demo">
  <form id="search">
    Search <input name="query" v-model="searchQuery">
  </form>
  <demo-grid :data="gridData" :columns="gridColumns" :filter-key="searchQuery">
  </demo-grid>
</div>
@endverbatim

额外注意点

看你的代码,布局文件layout.app.blade.php里已经有一个<div id="app">,而首页代码里又嵌套了一个同名的<div id="app">,这会导致Vue挂载时出现冲突(同一个页面不能有重复的id),建议把首页里的这个id改成其他名称,比如id="demo-app"。

内容的提问来源于stack exchange,提问作者Anil Kumar Sahu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:28:03