@rinatoptimus

Почему не работает этот пример Vue.js 2?

https://jsfiddle.net/gmsa/gfg30Lgv/ - здесь пример. Пробую перенести его в проект: js переношу в файл Test.vue, подключаю его, а html переношу внутрь тега #app. После этого ничего не работает. Как грамотно это организовать? Устанавливал без использования Вебпака, просто сохранил код Vue.js в папку и подключил к странице.

Пробовал разложить по файлам:
Tabs.vue:
Vue.component('query-browser-tab', {
    template: `
        <div id="queryBrowserTab">
            <h3>{{tab.name}}</h3>
        </div>`,
    data: function () {
        return {
            databaseOptions: [],
        };
    },
    props: ['tab'],
    methods: {}
});


Container.vue:
Vue.component('query-browser-container', {
template: `
<div id="queryBrowserContainer" style="margin-top: 50px;margin-left: 400px;">
    <ul class="nav nav-tabs" role="tablist">
        <li role="presentation" v-for="tab in tabs" :class="{active:tab.isActive}">
            <a href="#" role="tab" data-toggle="tab" @click.stop.prevent="setActive(tab)">{{ tab.name }}</a>

        </li>
        <li>
            <button type="button" class="btn btn-primary" @click="openNewTab">New tab</button>
        </li>
    </ul>
    <div class="tab-content">
        <div v-for="tab in tabs" role="tabpanel" class="tab-pane" :class="{active:tab.isActive}">
            <query-browser-tab :tab="tab"></query-browser-tab>
        </div>
    </div>
    <pre>{{ $data | json }}</pre>
</div>`,
data: {
tabs: [{
name: "tab1",
id : 0,
isActive: true
}],
activeTab: {}
},
ready: function () {
this.setActive(this.tabs[0]);
},

methods: {
setActive: function (tab) {
var self = this;
tab.isActive = true;
this.activeTab = tab;
this.tabs.forEach(function (tab) {
console.log("TAB => " + tab);
console.log("activeTab id => " + self.activeTab.id);
console.log("tab id=" + tab.id);

if (tab.id !== self.activeTab.id) { tab.isActive = false;}
});
},
openNewTab: function () {
newTab = {
name: "tab" + (this.tabs.length + 1),
id: this.tabs.length,
isActive: true
};
this.tabs.push(newTab);
this.setActive(newTab);
},

closeTab: function () {
console.log("### CLOSE!");
}
}
});


И потом подключил эти файлы, а теги компонентов вывел на странице:
<query-browser-tab></query-browser-tab>
 <query-browser-container></query-browser-container>


В консоли после этого пишется:
The "data" option should be a function that returns a per-instance value in component definitions.

Error in render function:
(found in )

Cannot read property 'name' of undefined

ну и еще 6 ошибок.
  • Вопрос задан
  • 1080 просмотров
Пригласить эксперта
Ответы на вопрос 1
@lem_prod
https://jsfiddle.net/gfg30Lgv/67/
попробуйте так
в html шаблон надо помещать в
<script type="text/x-template" id="id_name"></script>

а не <template id="id_name"></template>
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы