2016-06-21 22 views
16

Supponiamo che io sono una componente Vue.js come questo:Passando puntelli ai componenti Vue.js istanziati da Vue-router

var Bar = Vue.extend({ 
    props: ['my-props'], 
    template: '<p>This is bar!</p>' 
}); 

e voglio usarlo quando qualche itinerario in Vue-router è abbinato come questo :

router.map({ 
    '/bar': { 
     component: Bar 
    } 
}); 

Normalmente al fine di superare 'myProps' alla componente che vorrei fare qualcosa di simile:

Vue.component('my-bar', Bar); 

e in t egli HTML:

<my-bar my-props="hello!"></my-bar> 

In questo caso, il router sta attirando automaticamente il componente nell'elemento router-view quando il percorso è abbinata.

La mia domanda è, in questo caso, come posso passare gli oggetti di scena al componente?

risposta

25
<router-view :some-value-to-pass="localValue"></router-view> 

e nei componenti è sufficiente aggiungere prop:

props: { 
     someValueToPass: String 
    }, 

vue-router corrisponderà prop nel componente

+0

in alternativa, 'oggetti di scena: [ "prop1", "", "prop2 prop3"]' di più può essere trovato qui http://vuejs.org/guide/components.html#Props – dlkulp

+0

@lukpep Ho corso in qualcosa di simile, quando lego il mio sostegno su "", ho ricevuto il seguente errore "Attributo": my_prop "è ignorato sul componente perché il componente è un'istanza di frammento'. Qualche idea di cosa c'è che non va? – highFlyingDodo

+0

Questa potrebbe essere una cattiva idea. cosa succede quando l'utente arriva direttamente tramite URL? – shakee93

4
const User = { 
     props: ['id'], 
     template: '<div>User {{ id }}</div>' 
    } 
    const router = new VueRouter({ 
     routes: [ 
     { path: '/user/:id', component: User, props: true } 

     // for routes with named views, you have to define the props option for each named view: 
     { 
      path: '/user/:id', 
      components: { default: User, sidebar: Sidebar }, 
      props: { default: true, sidebar: false } 
     } 
     ] 
    }) 

modalità oggetto

const router = new VueRouter({ 
    routes: [ 
    { path: '/promotion/from-newsletter', component: Promotion, props: { newsletterPopup: false } } 
    ] 
}) 

Questo è il funzionario risposta. link

+5

In questa situazione, dove uno passerebbe effettivamente nella stringa "ciao", come è stato chiesto? – mcheah

+0

Leggendo ulteriormente nei documenti ufficiali: "Quando gli oggetti di scena sono impostati su true, il route.params verrà impostato come componente puntato." L'autore stava chiedendo come impostare un valore personalizzato "ciao" – tgf