Это проект laravel vuejs. Вот фото моей страницы продукта:
Товары должны были отображаться на этой странице, но она полностью пуста, пока я не нажму кнопку поиска. После нажатия на кнопку поиска страница загружает продукты, и опция поиска также работает.
Мои коды:
веб.php ->
Route::get('/', 'App\Http\Controllers\Mastercontroller@index');
Route::get('/search', 'App\Http\Controllers\Mastercontroller@search');
Route::any('{slug}', 'App\Http\Controllers\Mastercontroller@index');
Мастерконтроллер.php ->
<?php
namespace App\Http\Controllers;
use App\Models\myproductcase;
use Illuminate\Http\Request;
class Mastercontroller extends Controller
{
public function index(){
return view('welcome');
}
public function search(Request $r){
$search = $r->get('q');
return myproductcase::where('name','LIKE','%'.$search.'%')->get();
}
}
страница продукта ->
<template>
<div>
<div class = "search"><input v-model = "search" type=text></input><button
@click.prevent = "makesearch()">Search</button></div>
<div class = "product-list">
<div v-if = "showsearch==true">
<div v-for = "getresult in getdata" v-bind:key = "getresult.id">
<div class = "product">
<h1>{{getresult.name}}</h1>
<h3>{{getresult.price}}</h3>
<p>{{getresult.description}}</p>
</div>
</div>
<div v-if = "showsearch==false">
no data found
</div>
</div>
</div>
</div>
</template>
<script>
export default{
data(){
return{
search : '',
showsearch : false,
getdata : []
}
},
methods : {
async makesearch(){
fetch('/search?q='+this.search).then(hi=>hi.json()).then(hi=>{
console.info();
this.getdata = hi;
this.search = '';
this.showsearch = true;
}).catch(err=>{
console.info(err);
});
}
},
}
</script>
(1) вы хотите выполнить поиск сразу после загрузки страницы? (2) при вводе текстового поля хотите выполнить поиск и отобразить данные, не нажимая кнопку поиска?
если вы хотите попробовать (2), как указано @NileshPatel, попробуйте использовать часы
@nilesh patel @ bhucho нет, брат, я пытался отобразить все продукты, как только страница загружается. Я получил решение, хотя - спасибо за ваше время и мысли
Проблема в том, что когда вы загружаете страницу в первый раз, в вашем URL-адресе нет параметра запроса get, поэтому в строке
$search = $r->get('q'); // Is equal to NULL
Запрос, который вы делаете в первый раз:
return myproductcase::where('name','LIKE','%NULL%')->get();
Вы можете использовать приведенный ниже синтаксис для настройки параметра по умолчанию.
$search = $r->get('q', 'default value' );
PD: Будьте осторожны с SQL Injection Прочтите это
Редактировать: Также в вашем компоненте вызовите в смонтированном методе метод makesearch.
data(){
...
}
...
mounted(){
this.makesearch()
}
спасибо за ваш ответ, но у меня есть другое решение, использующее created() для загрузки всех данных в первый раз - это плохая практика?
Я отредактировал свой ответ, я всегда использую смонтированный метод. Проведите исследование жизненного цикла компонентов в Vue.
@Shishir, если у вас меньше данных, их можно загрузить в Mounted (), но если у вас огромный набор данных, это не лучший подход. В этом случае позвольте пользователю искать конкретные данные.
Вы имеете в виду, что я не должен размещать все данные на одной странице?
Добавление разбиения на страницы решило бы проблему тарификации огромного количества данных.
Вопрос в том, что продукт не загружается до того, как я нажму кнопку поиска, я хочу, чтобы продукты отображались автоматически, опция поиска должна работать как фильтр