livewire 的 @script 和 @endscript 指令无效?
目前的环境是 php 8.2.12 + laravel 10.31.0 + livewire v3.1.0
我在 livewire 页面组件的 blade 模板中使用了 @script
@endscript
指令,按照手册上的说法应该用来包裹 <script>
标签。
但@script
@endscript
指令被输出到页面,且无法在 javascript 脚本中获取到 $wire
对象,代码如下:
@script
<script>
document.addEventListener('livewire:initialized', () => {
// 下面这行报错:Uncaught ReferenceError: $wire is not defined
const flow = new Flow(new go.Diagram("diagram"), $wire);
const flowData = {{ Js::from($flow) }};
flow.setUpData(flowData);
})
</script>
@endscript
对照手册 livewire.laravel.com/docs/javascri... 应该可以从 javascript 脚本中访问到 $wire
对象,且不应该将@script
@endscript
指令输出到页面。
请大家帮我看看是哪里出了问题?
借这个帖子也写一些踩上的坑,目前发现了个新问题:
这样虽然可以响应事件,但会报错
Unable to resolve dependency [Parameter #0 [ <required> $argumentData ]]
貌似被当成注入参数了,错误在于事件数据必须是对象,且属性必须与参数名吻合,其余的都会被当做注入参数。所以可将JavaScript代码改为:现在碰到的问题是,在模板中使用了动态加载的组件 <livewire:is :component=”$currentForm” /> 但能看到返回数据已经修改,但对应的组件却未被加载。对应手册这里:livewire.laravel.com/docs/nesting#...
咋感觉一步一个坎。
是有什么更好的调试方法吗?还是我对这个库的理解有问题?大家有什么建议吗?
没用过livewire,但是看文档这个事件应该定义在外部的 js 代码中,不是在
@script
里用的,事件发生的时候 $wire 还没被声明,所以事件回调获取不到