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

Vue中用laracasts/utilities传Laravel变量出现[object HTMLTextAreaElement]怎么办?

解决Laravel变量传递到Vue显示[object HTMLTextAreaElement]的问题

嘿,我太懂这个坑了!你看到的[object HTMLTextAreaElement]根本不是我们要的文本内容,问题出在浏览器的默认行为和变量名冲突上。

问题根源

浏览器有个“贴心”但容易踩坑的机制:它会把页面中带有id属性的DOM元素自动挂载到window对象上,而且这个挂载的优先级比我们通过laracasts/utilities注入的变量更高。如果你的textarea的id或者name正好是description,那window.description就会被这个DOM元素覆盖,你在Vue里拿到的自然就是textarea元素对象,而不是我们要的房间描述文本。

解决方案(任选其一就行)

方案1:修改注入的变量名

最简单直接的办法,给变量换个不冲突的名字:
控制器代码改成:

JavaScript::put([ 'roomDescription' => $room->description ]);

对应的Vue代码更新:

var keywordcount = new Vue({
  el: "#desc-edit",
  data: {
    maxdesc: 160,
    desc: window.roomDescription
  },
  computed: {
    descEdit: function() {
      return this.maxdesc - this.desc.length;
    }
  }
});

方案2:修改textarea的id/name

如果不想改变量名,就把你的textarea的id和name改成别的,比如:

<textarea id="desc-textarea" name="desc-textarea"></textarea>

这样浏览器就不会把它挂载到window.description上,你原来的Vue代码就能正常拿到注入的文本变量了。

方案3:使用默认命名空间(可选)

如果你没强制设置js_namespace为window,默认的命名空间是Laravel,你也可以直接用Laravel.description来获取变量,这样就不会和DOM元素冲突:

desc: Laravel.description

不过既然你已经配置成window了,前两个方案更贴合你的现有配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:15:36