我有一个“父母-孩子”的情况,我正在尝试使用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.")
});
上面的内容也从未被触发过。
语境
在子组件上,必须有一个挂载函数,该函数必须有一个名为$任务的参数。试试这个:
class Child extends Component
{
public $task;
public function mount($task){
$this->task = $task
}
public function render()
{
return view('livewire.test.child');
}
}