Vue:仅特定页面的组件

Posted

技术标签:

【中文标题】Vue:仅特定页面的组件【英文标题】:Vue: Component for specific pages only 【发布时间】:2021-06-27 12:45:46 【问题描述】:

我在我的 Symfony 项目中使用 Vue.js (2),目前我的 Vue 实例带有“全局”组件(在我的例子中称为带有一些 CKEditor 库的编辑器)使用默认的 symfony webpack 预编译。

//app.js
import Vue from 'vue';
import Editor from './components/Editor';

new Vue(
    el: '#app',
    components: Editor
);
//components/Editor.vue
<template>
    <div>
        <textarea id="editor"></div>
    </div>
</template>

<script>
import ClassicEditor from '@ckeditor/ckeditor5-editor-classic/src/classiceditor';
import Essentials from '@ckeditor/ckeditor5-essentials/src/essentials';
import Heading from '@ckeditor/ckeditor5-heading/src/heading';
//tons of other imports 

export default 
    name: "Editor",
    mounted() 
        ClassicEditor.create(document.querySelector('#editor'), 
            plugins: [
                Essentials,
                Heading,
                //more plugins used from imports
            ],
            toolbar: [
                'heading',
                //more plugins
            ],
        ).then(editor => 
           
        ).catch(error => 
           
        );
    

</script>

由于我只有一个 Vue 实例,并且默认情况下包含每个组件,所以我的 Editor.vue 可以全局使用。然而这意味着,我的Editor.vue 实际上是在每个页面请求上默认加载的——即使你根本不需要编辑器。

现在编辑器本身有很多导入(因为我自定义了很多)。这会导致一个包含所有内容的相当大的 javascript 文件 - 这再次增加了加载时间。

我的目标是以某种方式删除全局组件Editor 并将其嵌入另一个名为editor.js 的javascript 文件中。该文件以后可以包含在特定页面中。

但是我不确定如何实现这一目标。我的 Vue 实例是在我的 app.js 中创建的,我需要在我的 editor.js 文件中添加编辑器组件。

【问题讨论】:

你不能只在布局中使用 twig 参数,例如对于所有使用编辑器的扩展页面都是如此,然后你将它分配给一个 js 变量,并且在应用程序 js 中你只做它的东西真的吗? 【参考方案1】:

这应该很简单。只需制作一个Editor 组件async component

Webpack 会自动将异步组件打包为单独的 js 块,并仅在需要时按需加载...

您可以在本地注册组件(在每个要使用的组件中):

export default 
  name: "ComponentUsingEditor",
  components: 
    'Editor': () => import('components/Editor.vue')
  
)

或全局:

app.js

import Vue from 'vue';

Vue.component(
  'Editor',
  () => import('components/Editor.vue')
)

new Vue(
    el: '#app'
);

【讨论】:

简单而简单的答案 - 不知道我是怎么错过的。非常感谢,像魅力一样工作

以上是关于Vue:仅特定页面的组件的主要内容,如果未能解决你的问题,请参考以下文章

Vue - 无法将特定值传递给更高的组件

Vue 组件系统

vue学习之四组件系统

Vue组件不显示商店数据

uniapp全局组件全局使用(不在每个页面template使用,仅支持H5),函数式调用全局组件方法

uniapp全局组件全局使用(不在每个页面template使用,仅支持H5),函数式调用全局组件方法