- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
此组件(display-section)在循环中调用子组件... -6ren">
我有两个加载 livewire 组件的 View
<x-layouts.formularies>
<livewire:formularies.edit.display-section :section="$section->id" :formulary="$formulary->id" />
</x-layouts.formularies>
此组件(display-section
)在循环中调用子组件...
<div class="letter mx-auto" id="section-holder">
<div class="paper-title d-flex justify-content-between">
@foreach($questionnaire->getData( 'logos', [] ) as $logo)
<img src="{{ asset($logo[ 'path' ]) }}" class="img-fluid h-100" />
@endforeach
</div>
<div class="section-questions">
@foreach($section->questions as $question)
<livewire:formularies.edit.display-row :question="$question->id"
:formulary="$formulary->id" :wire:key="$question->id" />
<hr />
@endforeach
</div>
</div>
现在,这是display-row
组件:
<div class="card-body text-center p-1">
<div class="btn-group m-1" role="group" aria-label="question-{{ $question->id }}">
@foreach($question->answers as $answer)
<input type="radio"
wire:model="answer"
:wire:key="$question->id . '-' . $answer->id"
wire:click="setAnswer"
class="btn-check"
value="{{ $answer->id }}"
name="question-{{ $question->id }}"
id="question-{{ $question->id }}-{{ $answer->id }}"
autocomplete="off" />
<label class="btn btn-outline-teal text-dark mb-0"
for="question-{{ $question->id }}-{{ $answer->id }}">{{ $answer->statement }}</label>
@endforeach
</div>
</div>
当用户从单选按钮中选择一个选项时,它会执行一些数据库操作并触发父组件应监听的事件(display-section
) :
public function setAnswer()
{
$this->emit( 'formularyUpdated', $this->formulary->id );
FormularyUpdated::dispatch( $this->formulary, $this->question, $this->answer );
dd( 'I should not get here if there is a dd before' );
}
如您所见,此函数会发出一个带有公式 ID 的 formularyUpdated
事件。在 DisplaySection 中我有这个:
protected $listeners = [
'sectionAdvanced',
'formularyUpdated',
];
/**
*
*/
public function formularyUpdated( Formulary $formulary )
{
dd( 'This dd should stop the execution' );
}
出于某种原因,这总是以“如果之前有 dd,我不应该到达这里”
那么,我应该更改什么?为什么我的听众不听或者没有被解雇?我尝试了不同的方法但没有运气。
最佳答案
简单总结一下;事件在组件 (PHP) 中发出 - 发出哪些事件以及随之而来的哪些数据通过响应发送。 Livewire 处理响应,并检查是否发出任何事件 - 如果是,它会告诉与该事件对应的 JavaScript 对象,发出了此类事件 - 并且这些 JavaScript 对象将发出自己的网络请求来处理该事件。 p>
换句话说,事件的整个监听和发出实际上发生在 JavaScript 中,即 Livewire 在服务器之间来回发出的响应和请求中。
当 Livewire 处理请求时,它会确定要调用哪些方法以及要设置哪些属性。它将看到您正在调用一个方法,并且调用该方法会通过 $this->emit()
发出事件,在您的例子中是方法 setAnswer
。执行此操作后,Livewire 将在响应中添加您发出的事件。这些事件的监听器位于 JavaScript 中 - 因为它不直接与其他 PHP 组件通信。
因此,您的请求被触发,您发出事件,并且响应返回一些指示事件已发出的内容。如果我们查看该请求的网络响应,它可能看起来像这样(这是来 self 的本地环境的伪代码/测试数据),
如您所见,它有一个发出的事件。我们可以发出更多事件,它们将按照发出的顺序出现。
同样的情况也适用于分派(dispatch)的浏览器事件,它们也会出现在这里,
对于我在这里展示的内容,这是从 wire:click
调用的方法,
public function myMethod()
{
$this->emit('my-first-emit', 'My first emit data');
$this->emit('my-second-emit', ['This time', 'the emit', 'passes an', 'array']);
$this->dispatchBrowserEvent('browser-dispatched-event', 'My browser-event data!');
}
因此,当 Livewire 收到响应时,它会检查它是否具有需要处理的某些效果 - 是否有任何调度的浏览器事件、发出的 Livewire 事件或其他任何内容。
如果响应在 effects.emits
下携带数据,它将发出这些事件,类似于使用 Livewire.emit('event-name', ...data)
在 native JavaScript 中,与不同组件对应的 JavaScript 对象将拾取这些对象并向相应组件发出新请求。让我们扩展我们的示例,
protected $listeners = ['myListener'];
public function myMethod()
{
$this->emit('myListener', 'My first emit data');
}
public function myListener($data = null)
{
// Do something with $data
}
现在,当我们调用方法 myMethod
时,就会触发网络请求,正如我们之前所看到的那样。但现在我们还收到了第二个请求,这是我们之前监听的已发出事件。我们再次可以使用网络检查器,这次我们对请求感兴趣,而不是响应。
正如我们所看到的,有两个请求 - 第一个是发出事件的请求,第二个是监听该事件的请求。第二个请求有一个update
参数,其类型为fireEvent
,它还有一些其他的Livewire数据,参数就是数据。这就是魔法发生的地方,以及它如何监听这些事件。
关于laravel - Laravel-Livewire 如何触发事件并监听它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69616842/
我已经安装了 composer,但是查看 Laravel 文档,我正在努力解决: “确保将 ~/.composer/vendor/bin 目录放在您的 PATH 中,以便在您的终端中运行 larave
我想在迁移时插入外键而不是在 1 中添加外键值 `public function up() { Schema::table('users', function (Bluepri
这是一个open bug on Github对于 laravel-mongodb 包,但没有任何反应。也许有人知道解决方案..? 选择作为单个文档时,日期显示为日期 { "_id": "5ca
我有一个 Laravel 应用程序,我将其用作 Joomla 中构建的更大应用程序的 API。我真的很喜欢使用 Laravel,并决定在 Joomla 应用程序中使用 Eloquent。我通过在 La
我有两个 Laravel 应用程序使用相同的数据库,因此具有相同的用户和密码。 假设应用程序称为 A 和 B。 如果用户登录 A,我该怎么做才能让他们自动登录 B?因此,如果他们登录到 A,那么当他们
我正在 github 上查看 Laravel 的源代码并注意到有一个 laravel/laravel和一个 laravel/framework .它们都链接到 Laravel 网站上的相同文档,并声明
我正在尝试将 laravel 从 5.4 版本更新到 5.5。我已经按照 Laravel 指南的指示完成了所有操作: https://laravel.com/docs/master/upgrade 当
我尝试从 foreach 向每个用户添加一些新值,但因为我使用 get,现在我不能在响应中使用分页,但我还需要向每个用户添加这些值。有什么想法吗? public function statistics
我有一个链接到销毁按钮的删除链接 $task->id ,'method'=>'DELETE'] ) }}"> delete 这是销毁函数 public function destroy($i
我想在 Laravel 中上传一组文件,但我不确定文件的路径和存储对象。八现在数据已存储,但在我的情况下路径是#。在下图中,我有从前面发送的数据(Vuejs 和我正在使用 vue-upload-com
在使用三向数据透视表时,我很难在 Laravel 中进行预加载。数据库设置如下: +-------+--------+-------+-------------+ | deals | venues |
我一直在从事 laravel 5.7 博客项目。我想评论一篇文章。 我需要实现这个: 登录前,我可以在评论文本区输入任何内容 我提交评论(当然会被auth中间件拦截) 然后我被重定向到登录页面 登录后
我正在尝试为我的应用程序中的文件创建一个临时 URL。我能够将文件上传到 S3 存储桶,并且能够使用方法 \Storage::temporaryUrl($this->url, now()->addHo
如果将 Eloquent 模型作为输入传递给 Laravel 排队作业,但模型在作业在队列中运行之前被删除,会发生什么情况? 例如,我正在使用 Laravel 5.2 构建一个电子商务网站,客户可以在
我正在尝试运行在测试运行之前将数据输入数据库的单元测试。我已经定义了一个设置方法,它为每个我不想要的测试用例运行。设置方法执行良好,没有问题。我想要的是将数据输入数据库一次,然后由所有测试用例使用。所
美好的一天。例如,我有一个带有字段/属性的模型 People: name surname 而且模型也有这个方法: public function FullName() { return "{$
我无法理解 Laravel 存在验证在检查数据库中现有记录方面的工作原理。 例如 带有 user.id = 1 的 POST 请求 是否可以使用验证规则:'id' => 'exists:users'检
我正在使用Laravel 5.2创建站点 我想做的是 INSERT同时3行 新的3行必须包含时间戳created_at updated_at。 使用Query Builder方法insert,是的,它
我试图通过href Action 将一些数据传递给我的 Controller 。我不知道为什么,但是laravel使用 GET 方法传递数据,但是我需要一个 POST 来代替 GET 。我真的不明白为
我有一个问题,我的存储文件夹上的服务器前提每 2 天重置一次。所以我运行这些命令并得到修复: sudo chown -R $USER:www-data storage sudo chown -R $U
我是一名优秀的程序员,十分优秀!