2017-01-25 34 views
9

Uczę się routera Vue. I chcę uczynić programową nawigację (bez <router-link>). router i widok:

router = new VueRouter({ 
     routes: [ 
      {path : '/videos', name: 'allVideos', component: Videos }, 
      {path : '/videos/:id/edit', name: 'editVideo', component: VideoEdit }, 
     ] 
    }); 

    new Vue({ 
     el: "#app", 
     router, 
     created: function(){ 
      if(!localStorage.hasOwnProperty('auth_token')) { 
       window.location.replace('/account/login'); 
      } 

      router.push({ name: 'allVideos' }) 
     } 
    }) 

Więc domyślnie pcham do trasy 'AllVideos' i wewnątrz tego składnika mam przycisk i sposób przekierowanie do 'przycisk' editVideo” :

<button class="btn btn-sm btn-warning" @click="editVideo(video)">Edit</button> 

metoda:

editVideo(video) {router.push({ name: 'editVideo', params: { id: video.id } })}, 

Działa dobrze. Ale gdy próbuję uzyskać identyfikator wewnątrz komponentu VideoEdit wykorzystaniem $route.params.id mam błędzie Uncaught ReferenceError: $ trasa nie jest zdefiniowana

Może dlatego, że nie używam NPM na razie tylko w wersji cdn Vue i Vuerouter. Jakieś rozwiązania? Dzięki!

Aktualizacja: btw w narzędziu dev Vue widzę $ instancji trasach wewnątrz komponentu

Aktualizowane:

var VideoEdit = Vue.component('VideoEdit', { 
      template: ` <div class="panel-heading"> 
         <h3 class="panel-title">Edit {{vieo.name}}</h3> 
        </div>`, 
       data() { 
        return { 
         error: '', 
         video: {}, 
       } 
      },   
      created: function() { 
        console.log($route.params.id); 
      }, 
     }) 
+1

można również umieścić tę część kod komponentu, w którym pobierasz plik param.id? Dodano kod –

+0

. Możesz sprawdzić. Dzięki! –

+1

możesz wypróbować console.log (this. $ Route.params.id) zamiast tego –

Odpowiedz

11

Dzięki Sandeep Rajoria

znaleźliśmy rozwiązanie, należy użyć this.$route oprócz $route wewnątrz komponentu

+2

po dodaniu 'this' otrzymuję' TypeError: Can not read property '$ route' of undefined' –

+0

Potrzebujesz więcej informacji. Dla mnie działa –

+0

Działa już teraz –

1

Jeśli używasz vue-v2 & vue-router v2, to w vue-cli generowany jest sposób podłączenia do routera np. ze składnikiem jest import routera (router/eksportowane w index.js)

<script> 
    import Router from '../router'; 

następnie w kodzie można użyć funkcji routera jak:

Router.push('/contacts'); // go to contacts page 
2
import Vue from 'vue' 
import Router from 'vue-router'; 

Vue.use(Router) 

const router = ... 
+2

Niektóre opowiadanie byłoby miło wyjaśnić, co tu zrobiłeś. –