提问者:小点点

Livewire-嵌套组件-内联javascript不工作


我有一个“父母-孩子”的情况,我正在尝试使用Livewire。我的问题是,在子组件上编写的任何内联Javascript都不起作用。

考虑两个组件

<!-- master.blade.php -->
<div>
    <a wire:click="$set('task', true)">Open Task</a>
    @if($task)
        <livewire:test.child :task="$task"></livewire:test.child>
    @endif
</div>
//Master.php
class Master extends Component
{
    public $task;

    public function render()
    {
        return view('livewire.test.master');
    }
}

在上面的主组件中,每当我单击“打开任务”时,$Task变量将设置为true。这将使子组件呈现。子组件如下所示:

<!-- child.blade.php -->
<div class="p-4">
    The task is set.<br />
    <a onclick="showName('Test Task')">Show task</a>

    <script type="text/javascript">
        function showName(name){
               alert("Task name is: " + name);
        }
    </script>
</div>
//Child.php
class Child extends Component
{
    public $task;

    public function render()
    {
        return view('livewire.test.child');
    }
}

当点击显示任务在孩子,我得到以下错误:

未捕获的引用错误:在HTMLAnchorElement.onclick(: 2:1)中未定义show Name

此外,在子组件上,我想知道Livewire何时完成了对该特定组件的加载,因此添加了以下内容。(如这里记载的)

//child.blade.php
document.addEventListener('livewire:load', function () { 
    console.log("Livewire finished loading in child.")
});

上面的内容也从未被触发过。

语境

  • 阿尔卑斯版本:2.7。3

共1个答案

匿名用户

在子组件上,必须有一个挂载函数,该函数必须有一个名为$任务的参数。试试这个:

class Child extends Component
{
    public $task;

    public function mount($task){
        $this->task  = $task
    }
    public function render()
    {
        return view('livewire.test.child');
    }
}