Я использую кучу Laravel и vue-router, но не полный, но только частично. Это нужно для создания фильтров ajax по параметрам и динамического изменения блейда url
с фильтром
<div class="container">
<filters
:filters="{{$filters->toJson()}}"
:selected_filters="{{json_encode($selected_filters)}}"
></filters>
</div>
vue component
<template>
<div>
<div v-for="item in filters">
<multiselect
v-model="filters_selected[item.slug]"
:options="item.filter_options"
:multiple="false"
:allow-empty="true"
track-by="id"
label="value"
:show-labels="false"
:placeholder="item.name"
@input="filter_select"
></multiselect>
<router-view :data="filter_result"></router-view>
</div>
<script>
export default {
props: ['filters', 'selected_filters'],
data() {
return {
filter_result: '',
filters_selected: this.selected_filters,
}
},
watch: {
'$route': 'filter_check_params'
},
methods: {
filter_select() {
let currentObj = this;
//prepare link and push in vue-router
let url = this.makeUrlWithOption (currentObj.filters_selected);
currentObj.$router.push(url)
},
filter_check_params() {
let currentObj = this;
axios.get(window.location.pathname)
.then(function (response) {
//Here comes the prepared blade template
currentObj.filter_result = response.data.data_result
})
},
makeUrlWithOption(filter_data_select){
//making url and return
return url
}
}
}
</script>
контроллер laravel создает вид и возвращает
return response()->json( [
'data_result' => view( 'front.list' )->with( 'results', $results)->render(),
'selected_filters' => $selectedFilters,
] );
список блейдов для рендеринга
@foreach($results as $result)
@if($result->published_at > \Carbon\Carbon::now())
<timer
starttime="{{ \Carbon\Carbon::now() }}"
endtime="{{ $result->published_at }}"
trans='{{ json_encode(__('lang.timer')) }}'
></timer>
@endif
@endforeach
Если я выведу этот шаблон не через ajax-timer, он будет работать, если через ajax-timer он отобразится в исходном коде так:
<timer
starttime="2019-11-08 13:25:42"
endtime="2019-11-16 00:00:00"
trans={}
></timer>