2016-11-30 2 views
3

У меня есть один компонент файла header.vue:Как передать данные в отдельные файловые компоненты в Vue.js?

<template> 
    <h1>{{text}}</h1> 
</template> 

<script> 
    export default { 
    data() { 
     return { 
     text: 'Header text', 
     }; 
    }, 
    }; 
</script> 

Я требую это в моем коде следующим образом

const Header = require('components/header.vue'); 

И называют это:

const header = new Vue({ 
    el: '#header', 
    data: { 
    text: 'New header text', 
    }, 
    render: h => h(Header), 
}); 

компонент визуализируется, но текст говорит Header text вместо New header text. Зачем?

+0

Я полагаю, вы хотите, чтобы динамически установить заголовок заголовка другими компонентами и т.д.? Или что вы хотите достичь? –

+0

Вы создаете новый компонент Vue, который отображает компонент Header в качестве его дочернего элемента. Данные из родительского компонента не влияют на данные дочернего элемента таким образом. Вы можете 'Vue.extend()' компонент заголовка, а затем создать экземпляр * с * с переопределенным свойством данных. –

+0

@DecadeMoon Итак, вы имеете в виду 'const Header = Vue.extend (require ('components/header.vue ')); ', а затем' new Header ({el: ..., data: {...}}); ', правильно? Это работает, но выглядит немного странно, расширяя импорт. Это действительно необходимо? – Mikko

ответ

1

Я думаю, что может быть два пути решения этого:

  1. вы можете передать заголовок, как props

Чтобы пройти реквизита вы должны сделать следующие изменения в header.vue:

<script> 
    export default { 
    props: ['text'], 
    }; 
</script> 

И назовите его:

const header = new Vue({ 
    template: '<header :text="text" />', 
    data: { 
    text: 'New header text', 
    } 
}); 
  1. Вы можете иметь заголовок как переменную vuex и использовать ее в компоненте header.
5

У вас есть два отдельных компонента: компонент заголовка и созданный вами анонимный компонент (с new Vue()). Анонимный компонент отображает компонент Header в качестве его дочернего элемента. Оба компонента имеют отдельные свойства data; родитель имеет text = 'New header text', а у ребенка text = 'Header text'.

Есть два способа (с верхней части моей головы), что вы можете достичь этого:

  1. Продлить компонент заголовка и переопределить его свойство text данных с новым значением:
const Header = require('components/header.vue'); 
const HeaderComp = Vue.extend(Header); 

const header = new HeaderComp({ 
    el: '#header', 
    data: { 
    text: 'New header text', 
    }, 
}); 
  1. Сделав text a prop вместо этого, вы сможете передавать данные до ребенка из родителя:

header.vue

<script> 
    export default { 
    props: ['text'], 
    }; 
</script> 

использование

const Header = require('components/header.vue'); 

// Using render function 

const header = new Vue({ 
    el: '#header', 
    render: h => h(Header, { 
    props: { 
     text: 'New header text', 
    }, 
    }), 
}); 

// Using template 

const header = new Vue({ 
    el: '#header', 
    components: { 
    Header, 
    }, 
    template: '<header text="New header text"/>', 
});