Vue 一个或多个实例?

Posted

技术标签:

【中文标题】Vue 一个或多个实例?【英文标题】:Vue one or multiple instances? 【发布时间】:2017-11-13 07:31:48 【问题描述】:

我对 Vue(结合 Laravel)很陌生。我不确定什么是最好的 vue(文件)结构。

例如:我有一个 vue 聊天应用程序和一个滑出的侧边栏。此时我已经创建了一个 vue 实例(在#app 元素处)。现在所有代码都在这个 vue 实例中。我应该如何为我的聊天应用和侧边栏分离实例中的数据和代码?

 Vue.component('chat-message', require('./components/ChatMessage.vue'));
 Vue.component('chat-log', require('./components/ChatLog.vue'));
 Vue.component('chat-composer', require('./components/ChatComposer.vue'));

    new Vue(
        el: "#app",
        data: 


**//Data for the chatapp**

            messages : [],

**//Data for the sidebar**

            showSidebar: false
        ,

**//Code for the chatapp**

        methods:
            addMessage(message) 
                this.messages.push(message);
                axios.post('messages', message)
            
        ,
        created() 
            axios.get('messages').then(response => 
                this.messages = response.data;
        );

            Echo.join('chatroom')
                .listen('MessagePosted', (e) =>
                this.messages.push(
                message: e.message.message,
                user: e.user,
            )
        );
        
    );

我更喜欢将此代码分成两个单独的文件(尤其是聊天应用程序的方法和其他代码,例如 chatroom.vue 和 sidebar.vue),并且只加载一个干净的 vue 实例,例如:

//Import components...
...
...
    new Vue(
        el: "#app"
    );

。我可以将此代码放入组件中吗?这会是什么样子?

谢谢。

【问题讨论】:

【参考方案1】:

你是对的,你可以而且应该把它分成两个不同的部分。

聊天室.vue

import ChatMessage from './components/ChatMessage.vue';
import ChatLog from './components/ChatLog.vue';
import ChatComposer from './components/ChatComposer.vue';

export default 
    components: 
        ChatMessage,
        ChatLog,
        ChatComposer,
    ,
    data: 
        // Data for the chatapp
        messages : [],
    ,
    // Code for the chatapp
    methods:
        addMessage(message) 
    ,
    created() 

sidebar.vue

export default 
    data: 
        // Data for the sidebar
        showSidebar: false,
    ,
    // Code for the sidebar

app.js

import ChatRoom from './chatroom.vue';
import SideBar from './sidebar.vue';

new Vue(
    el: "#app",
    components: 
        ChatRoom,
        SideBar,
    ,
);

【讨论】:

以上是关于Vue 一个或多个实例?的主要内容,如果未能解决你的问题,请参考以下文章

在vue中创建多个ueditor实例

如何不使用多个 Vue 的实例

vue 页面上有多个vue实例

vue高德地图 如何一次添加多个点标记到地图实例?

Vue.js 复选框组件多个实例

如何使用 Vue JS 组合多个 Vue JS 实例(与多个 html div 关联)?