Как правильно организовать компоненты vue.js и бэкэнд Laravel

У меня есть следующий шаблон главной страницы сайта:

Как правильно организовать компоненты vue.js и бэкэнд Laravel

Как видите, на этой странице есть несколько ползунков. Я понимаю, что каждый слайдер будет компонентом vue.js. Итак, каждый компонент будет делать запрос на получение данных JSON с сервера методом Post. В моем IndexPageController у меня будет много способов для этого. Затем мне нужно иметь ресурс для каждого слайдера. Это правильный путь?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
136
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Так и должно быть. Компонент - это отдельный объект, который не беспокоит другие внешние компоненты. Вы можете запросить у компонента сбор всех необходимых вам ресурсов. Никакой другой компонент Vue.js не заботится об этих ресурсах. Вы также можете создать другое действие для компонента, и оно ничего не отразится на других компонентах. Вы можете делать все, что захотите, внутри компонента.

Чтобы решить сложную структуру, вы можете создать дочерний компонент, а дочерний компонент может содержать другой дочерний компонент и так далее.

Вы можете поместить логику запроса сервера в ловушку созданный или даже в ловушку установленный. Поскольку запрос всегда асинхронный, вам нужно подождать, пока ваш компонент получит все данные с сервера. А пока используйте какой-нибудь загрузчик в своем элементе, чтобы визуально отобразить, что что-то загружается. И когда вы получаете данные, вы знаете, что вам нужно делать.

Согласно вашей картинке, весь ваш слайдер будет составной частью. И каждая карточка в этом слайдере тоже будет компонентом. Используйте v-для в компоненте карты для динамического создания нескольких карт. У вас также может быть другой компонент внутри вашего компонента карты. Таким образом вы можете упростить свою логику. Будет намного лучше, если вы будете использовать однофайловый компонент Vue (файл .vue).

Спасибо за ответ!! И я хотел бы спросить о файловой структуре на сервере (в Laravel). Я собираюсь сделать один ресурс для одного компонента. Это правильно?

Aleksej_Shherbak 22.06.2018 12:43

Ваша внутренняя структура не имеет ничего общего с компонентом Vue. Вы просто делаете запрос от компонента vue и получаете ответ от сервера. Но ваши возвращаемые данные должны быть в формате JSON. Вы можете использовать Axios, который автоматически преобразует ответ в Json.

santanu bera 22.06.2018 12:47

Хорошо) Я понимаю это с точки зрения vue js)) Но какой путь будет полезнее с точки зрения Laravel? Что вы думаете об этом?

Aleksej_Shherbak 22.06.2018 12:53
Ответ принят как подходящий

Поскольку у вас более одного слайдера, и все они работают с одним и тем же поведением вместо создания нескольких компонентов слайдера для каждого раздела вашего шаблона, так как на картинке вы получите три компонента слайдера, почему бы не создать один компонент слайдера и передать ему источник, из которого он должен извлекать данные в качестве реквизита, а затем использовать Axios или VueResource для извлечения данных из этого источника, проверьте пример ниже

//test.blade.php

<div id = "app">
    <slider-component :source = "{{$source}}"></slider-component>
</div>

//$source is a variable you compacted it (passed it) to blade view on render
//it could be the endpoint you want to fetch data from 
//for example if you want to pull hot-deals items it could be "/products/hot-deals"
//if you want it to be most viewed items then "/products/most-viewed" and so on
//for sure you have to register routes in your app that matches these end points

Теперь давайте посмотрим, как получить данные из этого источника в нашем компоненте слайдера.

//slider component
<template>
    //your html goes here
</template>

<script>
    export default {
        props : ['source'], //this should be called source since in our blade we passed it as source
        data(){
            return {
                items : [],
            }
        },
        created(){
            axios.post(this.source , {
                 //your request body here
            })
            .then(res => {
                //handle the request and then assign items the res body
            })
            .catch(err => {
                //do something in case of error
            });
        }
    }
</script>

Таким образом, у вас есть только один настраиваемый компонент слайдера, который может извлекать данные из настраиваемого источника.

Вот как работать со стороны Laravel, сначала давайте создадим конечные точки либо в routes/web.php, либо в routes/api.php для простоты, я сделаю это в routes/web.php

//routes/web.php
Route::get('/products/hot-deals" , "ProductController@hotDeals");

А вот и контроллер продукта

use App\Models\Product;

class ProductController extends Controller {

    public function hotDeals(){
        //query your product model to select the hot-deals items for example
        return Product::where('price' , '<=' , 100);
    }
}

Надеюсь, вы нашли это полезным, удачи.

Спасибо за ответ! А как я могу организовать код на стороне Laravel?

Aleksej_Shherbak 22.06.2018 14:09

Другие вопросы по теме