1

I'm trying vueJS (+ laravel) and i'm encountering a problem.

I made an OrdersComponent.vue with a v-for (for each order which I retrieved from my API), but nothing happens

OrderComponent.vue : (h1 is rendering, and console.log(this.orders) is working)

 <template>
 <div>
 <h1> Commandes </h1>
 <div class="card card-body" v-for="order in orders" v-bind:key="order.idCommande">
 <h2> {{ order.date }} </h2>
 <span> {{ order.statut }} </span>
 </div>
 </div>
</template>
<script>
import Vue from 'vue'
export default Vue.extend({
 data() {
 return {
 orders: [],
 order: {
 idCommande: '',
 date: '',
 prix: '', 
 statut: '',
 },
 orderId: '',
 edit: false
 }
 },
 methods: {
 fetchOrders() {
 fetch('api/orders')
 .then(res => res.json())
 .then(res => {
 this.orders = res.data;
 console.log(this.orders);
 })
 }
 },
 created() {
 this.fetchOrders();
 }
})
</script>

Page which call the component (orders.blade.php) :

@extends('layouts.app')
@section('content')
 <orders></orders>
@endsection

finally, layouts.app file :

<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
 <meta charset="utf-8">
 <meta http-equiv="X-UA-Compatible" content="IE=edge">
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <!-- CSRF Token -->
 <meta name="csrf-token" content="{{ csrf_token() }}">
 <title>{{ config('app.name', 'Laravel') }}</title>
 <!-- Scripts -->
 <script src="{{ asset('js/app.js') }}" defer></script>
 <!-- Fonts -->
 <link rel="dns-prefetch" href="https://fonts.gstatic.com">
 <link href="https://fonts.googleapis.com/css?family=Nunito" rel="stylesheet" type="text/css">
 <!-- Styles -->
 <link href="{{ asset('css/app.css') }}" rel="stylesheet">
</head>
<body>
 <div id="app">
 <nav class="navbar navbar-expand-md navbar-light navbar-laravel">
 <div class="container">
 <a class="navbar-brand" href="{{ url('./') }}">
 MyOnlineCV
 </a>
 <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="{{ __('Toggle navigation') }}">
 <span class="navbar-toggler-icon"></span>
 </button>
 <div class="collapse navbar-collapse" id="navbarSupportedContent">
 <!-- Left Side Of Navbar -->
 <ul class="navbar-nav mr-auto">
 </ul>
 <!-- Right Side Of Navbar -->
 <ul class="navbar-nav ml-auto">
 <!-- Authentication Links -->
 @guest
 <li class="nav-item">
 <a class="nav-link" href="{{ route('login') }}">{{ __('Login') }}</a>
 </li>
 <li class="nav-item">
 <a class="nav-link" href="{{ route('register') }}">{{ __('Register') }}</a>
 </li>
 @else
 <li class="nav-item dropdown">
 <a id="navbarDropdown" class="nav-link dropdown-toggle" href="#" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" v-pre>
 {{ Auth::user()->username .' '. Auth::user()->email }} <span class="caret"></span>
 </a>
 <div class="dropdown-menu dropdown-menu-right" aria-labelledby="navbarDropdown">
 <a class="dropdown-item" href="{{ route('commandes') }}"> Mes commandes </a>
 <a class="dropdown-item" href="{{ route('logout') }}"
 onclick="event.preventDefault();
 document.getElementById('logout-form').submit();">
 {{ __('Logout') }}
 </a>
 <form id="logout-form" action="{{ url('/logout') }}" method="GET" style="display: none;">
 @csrf
 </form>
 </div>
 </li>
 @endguest
 </ul>
 </div>
 </div>
 </nav>
 <main class="py-4">
 <div id="app">
 <div class="container">
 @yield('content')
 </div>
 </div>
 </main>
 </div>
<script src="{{ asset('js/app.js') }}"></script>
</body>
</html>
asked Aug 14, 2018 at 16:29

3 Answers 3

1

Maybe you have already fixed it but in my case I was using an arrow function in methods but it was not working this way. I had to change it to "normal" function declaration like so:

methods: {
 fetchOrders: function() {
 fetch('api/orders').then(res => res.json())
 .then(res => {
 this.orders = res.data;
 console.log(this.orders);
 });
 }
}, 
answered Jul 9, 2020 at 17:26

Comments

0

Try to remove this from your component`s data() method:

 ...
 order: {
 idCommande: '',
 date: '',
 prix: '', 
 statut: '',
 },
 orderId: '',
 ...

You declare "order" in v-for section:

v-for="order in orders"
answered Aug 14, 2018 at 16:44

2 Comments

Did you re-compile app after removing order:{...} ?
@AfrazAhmad Yes i did
0

May be you forgot to recompile your app after making change.

Remove order object from data()

 order:{
 idCommande: '',
 date: '',
 prix: '', 
 statut: '',
 }

and recompile the app using:

npm run dev

Moreover: We create this kind of objects when we are going to submit some data using a form.

For example

For signup/register, we get user name, email, age, etc and save it into an object like below by calling each value in a template (e.g. user.name)

user:{
 name:'',
 email:'',
 age: '',
}

and then we just send user object via axios or fetch to the server.

answered Aug 14, 2018 at 18:35

1 Comment

Yes I recompiled the app after removing the 'order' object, but I stil have the same issue

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.