Livewire Laravel - TypeError: невозможно прочитать свойство getAttributeNames со значением null - PullRequest
0 голосов
/ 09 июля 2020

Я получаю данные из Ajax после отправки формы. Существует слушатель, который устанавливает атрибут для моего компонента.

Я пытаюсь добиться отображения моих результатов после отправки формы. В компоненте модель была хорошо извлечена, но когда я хотел бы отобразить ее в своем компоненте, я получаю сообщение об ошибке.

directive_manager.js:26 Uncaught (in promise) TypeError: Cannot read property 'getAttributeNames' of null
    at _default.value (directive_manager.js:26)
    at new _default (directive_manager.js:6)
    at new DOMElement (dom_element.js:12)
    at Function.value (dom.js:36)
    at Component.get (index.js:56)
    at Component.value (index.js:272)
    at Component.value (index.js:246)
    at Component.value (index.js:182)
    at Component.value (index.js:158)
    at Connection.value (index.js:30)

index.blade. php

   <div id="results-products" class="results-products">
        <livewire:charts-products>
    </div>

....
<script>
...
var product= fetchData(url);
window.livewire.emit('set:product', product)
...
</script>

диаграммы-продукты. лезвие. php

<div>
    @isset($product)
    @foreach ( $product->category as $category)
    <div class="card">
        <div class="card-header">
            <h4>Product category</h4>
        </div>
    </div>
    @endforeach
    @endisset

</div>

диаграммыПродукты. php

<?php

namespace App\Http\Livewire;

use Livewire\Component;
use App\Models\Product;

class ChartsProducts extends Component
{

    public $products;

    protected $listeners = [
        'set:product' => 'setProduct'
    ];

    public function render()
    {
        return view('livewire.charts-products');
    }


    public function setProduct($product)
    {
        $this->product= Product::find($product);
        //I have checked and the assigned variable is ok
    }


}

Товар является моделью и имеет категорию отношения.

Что-то я пропустил?

1 Ответ

0 голосов
/ 10 июля 2020

Это связано с тем, как ведет себя доминант внутри Livewire. Попробуйте добавить ключ к элементу l oop

<div>
    @isset($product)
        @foreach ($product->category as $category)
            <div class="card" wire:key="{{ $loop->index }}">
                <div class="card-header">
                    <h4>Product category</h4>
                </div>
            </div>
         @endforeach
    @endisset
</div>

См. Устранение неполадок в документации https://laravel-livewire.com/docs/troubleshooting

Кроме того, измените свойство publi c от $products до $product

...