【问题标题】:Livewire emitTo and redirectLivewire emitTo 和重定向
【发布时间】:2021-11-19 19:03:30
【问题描述】:

在组件 AAA 的视图中,我有一个向组件 AAA 提交事件的按钮

组件 AAA 视图:

<button wire:click="$emit('goToPage')">Go To Two</button>

组件 AAA 像这样接收它:

protected $listeners = ['goToPage'];

然后我想触发另一个事件,该事件重定向以及将选项卡值从组件 BBB 中的 1 更改为 2。

看起来像这样(仍在组件 AAA 中*):

    public function goToPage()
    {
      $this->emit('changeTabs', $this->tab="two")->to('Alphabet.BBB');
      $this->redirectRoute('bbb', $this->bbb->id);
    }

组件 BBB 我有以下内容:

    public $tab = 'one'; //THIS IS THE DEFAULT TAB

    protected $listeners = ['changeTabs'];

    public function changeTabs()
    {
        return $this->tab="two";
        //dd(Made it here);

    }

我从 AAA 页面重定向到 BBB 页面,但 changeTabs 功能不起作用。该选项卡保持在其默认选项卡之一。

它永远不会到达changeTabs 函数返回或死转储。

我该如何解决这个问题?

谢谢!

【问题讨论】:

    标签: laravel laravel-livewire


    【解决方案1】:

    形成我所理解的:

    $this->redirectRoute('bbb', $this->bbb->id);
    

    进行 HTTP 重定向,因此当您进行完全重定向时,发出事件不会产生任何变化,并且在重定向后会有新的组件。

    我个人会改为使用:

     return redirect()->route('bbb', ['param1'=> $this->bbb->id, 'tab' => 'two']);
    

    然后使用组件mount方法中的请求变量来决定应该打开哪个标签。

    当然,除了在 url 中公开选项卡,您还可以将其闪烁到会话以更加透明

    【讨论】:

    • 你如何解释它为什么不工作是完全有道理的。你能解释一下关于将这个闪现到会话中的更多信息吗?我需要将当前默认的 $tab 变量从 $tab = 'one' 更改为 $tab = 'two' 正如你所提到的。新值在我的 URL 中。
    • @daugaard47 您可以使用session()-&gt;flash('tab', 'two');,并且可能在安装方法中您可以使用$this-&gt;tab = session-&gt;get('tab, 'one'); 之类的东西来设置有效的选项卡 - 请参阅laravel.com/docs/8.x/session#flash-data
    • 谢谢。那效果很好。好主意!
    猜你喜欢
    • 2021-02-11
    • 1970-01-01
    • 2022-12-04
    • 1970-01-01
    • 2021-01-07
    • 2020-12-12
    • 2017-01-03
    • 2015-03-20
    • 1970-01-01
    相关资源
    最近更新 更多