使用 livewire defer,如果输入值有文本,则在单击分页 link 时发送值 - 如何停止此操作?

Using livewire defer, if input value has text the value is sent when pagination link is clicked- how to stop this?

我正在使用带分页功能的 livewire。我将输入设置为延迟,以便在单击搜索按钮之前不执行搜索。但是,我还注意到,如果我在搜索框中有任何文本,那么只要单击分页按钮,就会发送该值。当单击分页按钮时,我尝试将 jquery $(document).on("click", ".page-link", () => $( "#inlineFormInput" ).val("")); 中的值设置为“”,但这并没有解决问题。实际上清除该值可能会导致其他问题。

期望的结果是,如果用户出于某种原因在搜索框中留下文本,如果用户改变主意并仅单击分页 link,则不会传递该值。仅当单击搜索按钮时才应传递输入值。任何帮助将不胜感激。

livewire 组件 html:

<div id="searchBoxRow">
   <input wire:model.defer="search" wire:keydown.enter="updateFaculty" id="inlineFormInput" class="form-control" val="" type="search" autocomplete="off" placeholder="Seach for Name or Country" aria-label="Search">
    <button wire:click="updateFaculty" class="btn btn-primary" id="facultyCardsSearchButton" type="submit">
       <i class="bi bi-search button-icon"></i>
       <span class="button-text">Search</span>
   </button>
</div>

livewire php 文件:

<?php

namespace App\Http\Livewire;

use App\Models\Tag;
use App\Models\Faculty;
use Livewire\Component;
use Livewire\WithPagination;

class FacultyData extends Component
{
    use WithPagination;

    protected $paginationTheme = 'bootstrap';

    public $search = null;
    public $tagId = null;

    public function updateFaculty(){
        $search = $this->search;
        $tagId = $this->tagId;
        $this->emit('closeAutocomplete');
    }
    
    public function updatingSearch()
    {
        $this->resetPage();
    }
    
    public function render()
    {
        $tags = Tag::all(); 

        $allFaculty = Faculty::searchFilter([$this->search, $this->tagId])->with('country', 'tags')->paginate(10);

        return view('livewire.faculty-data', [
            'allFaculty' => $allFaculty,
            'tags' => $tags
        ]);
        
    }
}

这是一个想法。您可以使用 $page 属性 挂钩的 updatingPage() 。执行页面切换时清除搜索 属性。但是,您需要以某种方式检查这是否是之前搜索数据的结果,或者只是客户已经按照他的方式行事......好吧,我的想法是得到一个标记 属性 来告诉 livewire 做什么。例如

public $searchFlag = false;

public function updateFaculty(){
   if ($this->search) // only of search has any value
      $this->searchFlag = true;

   // do 
}

public function updatingPage()
{
   if (! $this->searchFlag) {
      $this->reset(['search']);
   }
   if (! $this->search) {
      $this->reset(['searchFlag']);
   }
}