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

VueJS与Laravel中Textarea的v-model初始值设置问题

正确设置Vue+Blade环境下textarea的默认初始值

你的问题核心在于v-model会覆盖textarea标签内的内容——Vue初始化时会把message的初始值(你设的空字符串)同步到textarea,所以直接在标签里写{{ $detailsFromLaravelController }}是无效的。要解决这个问题,你需要把Laravel传来的变量直接赋值给Vue的message初始值,同时同步初始化编译后的Markdown内容。

下面是两种可靠的实现方式:

方法1:直接用Blade变量初始化Vue的data

把Blade变量直接注入到Vue的message初始值里,同时初始化compiledMarkdown为对应的编译结果,再通过watch监听输入变化实时更新:

<!-- Blade模板里的HTML -->
<div id="editor">
  <textarea v-model="message"></textarea>
  <div v-html="compiledMarkdown"></div>
</div>
// Vue实例代码
window.onload = function() {
  var editor = new Vue({
    el: '#editor',
    data: {
      // 用反引号包裹Blade变量,支持换行和特殊字符
      message: `{{ $detailsFromLaravelController }}`,
      // 初始化编译后的Markdown
      compiledMarkdown: marked(`{{ $detailsFromLaravelController }}`, { sanitize: true })
    },
    // 监听message变化,实时更新编译结果
    watch: {
      message(newContent) {
        this.compiledMarkdown = marked(newContent, { sanitize: true });
      }
    }
  });
}

方法2:用json_encode处理特殊字符(更安全)

如果$detailsFromLaravelController包含引号、换行或其他特殊字符,直接用Blade输出可能会导致JS语法错误。这时可以用Laravel的json_encode来转义,确保内容是合法的JS字符串:

data: {
  message: {!! json_encode($detailsFromLaravelController) !!},
  compiledMarkdown: marked({!! json_encode($detailsFromLaravelController) !!}, { sanitize: true })
}

这里用{!! !!}而不是{{ }},因为json_encode输出的是原始JS字符串,不需要Blade转义HTML实体。

关键注意点

  • 不要在textarea标签内写内容:v-model会完全接管textarea的值,所以标签内的{{ ... }}会被Vue覆盖,直接删掉即可。
  • 初始化compiledMarkdown:确保页面加载时就显示默认内容的编译结果,而不是空值。
  • watch监听:保证用户输入时,编译后的Markdown能实时更新。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:32:45