отображение laravel метода показа на vue компоненте - PullRequest
0 голосов
/ 20 февраля 2020

У меня есть список фильмов, которые я пытаюсь отобразить детали одного мова ie, используя метод show, вот мой компонент для всех фильмов

<template>
    <div>
        <el-row :gutter="10">
            <el-col :span="6" v-for="movie in movies" v-bind:key="movie">
                <el-card shadow="always" :body-style="{ padding: '0px'} ">
                    <img v-bind:src="movie.cover_photo" class="image" >
                        <div style="padding: 14px;">
                            <div class="bottom clearfix">

                                <router-link :to="{name:'details',params:{id:movie.id}}">{{movie.title}}</router-link> 
                                    <router-view></router-view>
                                    <h4>{{ movie.year }}</h4>
                                    <h4>{{ movie.type }}</h4>
                            </div>
                            <div class="block">
                                <el-rate  :max="10" ></el-rate>
                            </div>          
                        </div>
                </el-card>
            </el-col>
        </el-row>
    </div>
</template>

<script>
    import axios from 'axios'
    export default {
        data() {
            return {
                movies: [],
                movie:{
                    id:'',
                }
            };
        },
        created(){ 
          this. fetchMovieList(); 
          this.showMovie
        },
        methods: {
            fetchMovieList() {
                    axios.get('/movies').then(response => {
                        this.movies = response.data;
                    })
                   .catch(error=>console.log(error))
            },
            showMovie(id){
                axios.get('/movies/'+id).then((res)=>{

                if(res.data.status==true){
                    this.movie= res.data.movie;
                    console.log(res.data.movie)
                }else{
                    alert('No Movie founded with this id')
                }
            })
            .catch((err)=>{alert('error')})
            }
        }
    }
</script>

<style scoped>
.image {
    width: 100%;
    display: block;
  }

</style>

Метод моего шоу:

public function show($id)
{
        $movie=Movie::find($id);
    if($movie){
        return response()->json(['status'=>true,'movie'=>$movie]);
    }else{
        return response()->json(['status'=>false]);
    }
}

мой маршрутизатор на приложении. js:

const movie=Vue.component('details', require('./components/DetailsComponent.vue').default);


/**
 * Next, we will create a fresh Vue application instance and attach it to
 * the page. Then, you may begin adding components to this application
 * or customize the JavaScript scaffolding to fit your unique needs.
 */
const router=new VueRouter({
    mode:'history',
    routes:[
        {
            path:'/movie/:id',
            name:'movie',
            component:movie
        },


    ],

});

const app = new Vue({
    el: '#app',
   router,
});

, когда я нажимаю на ссылку маршрутизатора, он просто меняет URL-адрес на идентификатор mov ie, но он не показывает компонент с деталями, когда я нажимаю конечную точку шоу с указанным c идентификатором, он возвращает mov ie в формате json в браузере

Ответы [ 2 ]

1 голос
/ 20 февраля 2020

Я думаю, что ваша переменная v-for конфликтует с той же переменной data (). Вы должны попробовать другое имя переменной v-for. Что-то вроде

<el-col :span="6" v-for="value in movies" v-bind:key="movie">
    <el-card shadow="always" :body-style="{ padding: '0px'} ">
        <img v-bind:src="value.cover_photo" class="image" >
        <div style="padding: 14px;">
            <div class="bottom clearfix">
                <router-link :to="{name:'details',params:{id:value.id}}">{{value.title}}</router-link> 
                <router-view></router-view>
                <h4>{{ value.year }}</h4>
                <h4>{{ value.type }}</h4>
            </div>
            <div class="block">
                <el-rate  :max="10" ></el-rate>
            </div>          
        </div>
    </el-card>
</el-col>
0 голосов
/ 20 февраля 2020

Надеюсь, это поможет вам: Реакция на изменения параметров

С уважением,

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