1

I'm following this video: https://laracasts.com/series/learn-vue-2-step-by-step/episodes/26?autoplay=true

My initial problem is described here, but that was resolved. I include it here so you can see what steps I've taken so far.

Now, I'm getting this warning: [Vue warn]: Failed to mount component: template or render function not defined.

A warning is not so bad, but the router-view is not showing up. That is, there is nothing showing up below the Home and About links.

master.blade.php

<!doctype html>
    <html lang="en">
    <head>
        <title>My App</title>
        <link rel="stylesheet" href="/css/app.css">
    </head>
    <body>
        <div id="app">
            <router-link to="/">Home</router-link>
            <router-link to="/about">About</router-link>

            <router-view></router-view>
        </div>
        <script src="/js/app.js"></script>
    </body>
</html>

Home.vue

<template>
    <div class="container">
        <div class="row">
            <div class="col-md-8 col-md-offset-2">
                <div class="panel panel-default">
                    <div class="panel-heading">Home Page</div>

                    <div class="panel-body">
                        I'm an example component!
                    </div>
                </div>
            </div>
        </div>
    </div>
</template>

<script>
    export default {
        mounted() {
            console.log('Component mounted.')
        }
    }
</script>

Any help would be appreciated. Thanks!

[Edit 1]

resources/assets/js/app.js

import './bootstrap';
import router from './routes';


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

resources/assets/js/bootstrap.js

import Vue from 'vue';
import VueRouter from 'vue-router';
import axios from 'axios';

window.Vue = Vue;
Vue.use(VueRouter);

window.axios = axios;

window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';

let token = document.head.querySelector('meta[name="csrf-token"]');

if (token) {
    window.axios.defaults.headers.common['X-CSRF-TOKEN'] = token.content;
} else {
    console.error('CSRF token not found: https://laravel.com/docs/csrf#csrf-x-csrf-token');
}

[Edit 2]

resources/assets/js/routes.js

import VueRouter from 'vue-router';


let routes = [
    {
        path: '/',
        component: require('./views/Home.vue')
    }
];

export default new VueRouter({
    routes
});
6
  • Can you show what you have in js/app.js. Commented Jul 13, 2017 at 13:06
  • Thanks for the reply! I added my app.js and bootstrap.js files. Commented Jul 13, 2017 at 13:33
  • 1
    Do you have templates or components for your routes in routes.js VueRouter. Commented Jul 13, 2017 at 13:36
  • Sorry - I should've included that as well. I just updated my question to include my routes.js file Commented Jul 13, 2017 at 13:39
  • 1
    That brings as to /views/Home.vue :) Commented Jul 13, 2017 at 13:43

1 Answer 1

2

Ah! Thanks to TheFallen's questions, I see my problem. Here's what my routes.js file should look like:

import VueRouter from 'vue-router';
import Home from './views/Home.vue';

let routes = [
    {
        path: '/',
        component: Home
    }
];

export default new VueRouter({
    routes
});
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

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.