5

我正在尝试使用 Laravel 8 Livewire Modal Popup 进行数据输入并进入另一个页面。但我得到 undefine 变量 _instance 并且无法理解它。

@entangle($attributes->wire('model'))

当我从views/vendor/jetstream/components/modal.blade.php 中删除它时,这一行会产生这个错误。错误会消失。

第 34 行。

<div id="<?php echo e($id); ?>" x-data="{ show: <?php if ((object) ($attributes->wire('model')) instanceof \Livewire\WireDirective) : ?>window.Livewire.find('<?php echo e($_instance->id); ?>').entangle('<?php echo e($attributes->wire('model')->value(

    x-show="show"

    x-on:close.stop="show = false"

    x-on:keydown.escape.window="show = false"

    class="fixed top-0 inset-x-0 px-4 pt-6 sm:px-0 sm:flex sm:items-top sm:justify-center"

    style="display: none;">
4

2 回答 2

8

这也让我很焦虑,但我想我找到了解决方案:正如@georgy-malanichev 所说,您只能从Livewire组件内部调用 Livewire 方法(而不是Blade组件或任何其他自定义组件内部)。

鉴于您正在尝试使用内部组件resources/views/dashboard.blade.php,解决方案是:

  1. 使用创建一个 livewire 组件artisan make:livewire MyDashboard
  2. 剪下和之间的所有内容<x-app-layout>并将</x-app-layout>dashboard.blade.php粘贴到views/livewire/my-dashboard.blade.php
  3. 添加@livewire('my-dashboard')x-app-layout标签内,鲍勃是你的叔叔(它应该开始工作)

为了帮助您了解发生了什么,如果您查看模态组件的源代码,您会看到如下一行show: @entangle($attributes->wire('model')),:我不确定如何准确描述它的作用,但本质上,@entangle()它期待“模型”Livewire 对象的一个​​实例,但它没有找到。

它没有找到它,因为它是从非 livewire 组件调用的。一旦你把它放在 Livewire 组件中,它就开始工作了。

我希望额外的细节能让事情变得更清楚。

于 2020-11-29T13:26:13.370 回答
1

我遇到了同样的错误,但就我而言,这是我在 LiveWire 组件x-data="{ open: @entangle('showDropdown') }" 之外遇到的事实。一旦我将它移到组件模板中,它应该在哪里,问题就消失了。

于 2020-11-03T21:42:03.887 回答