当前位置: 首页 > 知识库问答 >
问题:

另一个Vue实例中的Vue实例

殳阳飙
2023-03-14

我正在将Vue与一个名为AEM的CMS进行集成,该CMS基本上可以像Vue一样作为组件基础系统工作。而不是有一个网页和进口的。vue文件,此CMS上的每个组件都是一个新的vue实例(新的vue({…}))。因此,在我的页面上,有许多Veu实例使用同一个存储(vuex)彼此通信。

这实际上工作得很好,但我有一个场景,当我需要一个CMS组件在另一个组件中时。由于这两个组件都是唯一的vue实例,并且父级的“el”属性包含子级的“el”,因此子组件无法工作。

我知道这不是这个库的预期用途,但是有没有办法在两个vue实例上告诉或共享相同的“上下文”,甚至是这个场景的另一种方法。

谢谢,亚历山大。

共有3个答案

别烨熠
2023-03-14

解决方案:

>

  • 替换所有新Vue(...)东西到Vue.component(...)Vue.extend(...)等更好的接口管理。

    仅使用ONEVue实例女巫是new Vue({...选项})

  • 锺离自明
    2023-03-14

    您应该只使用一个Vue实例,如前面提到的。

    如果您继续为每个组件实例化Vue实例,您将在调试或组件通信时遇到问题,总的来说,这变得非常糟糕,您将错过Vue提供的父子通信和继承。

    我不知道你的Vue架构,但我目前正在编写一份在AEM与Vue合作的手册。

    基本的前提是使用Vue的inline-模板和vanilla-js,在构建时没有typecript,nodeJS build,jsx或其他任何东西,只有vanilla-js,这样当你的页面加载时,甚至在你的js包出现之前,DOM在那里,您只需要通过实例化一个将装载所有组件的Vue实例来装载组件。这对搜索引擎优化来说也很棒(除非你计划在java中呈现服务器端的Vue组件...这在理论上是可能的,但是祝你好运!)

    以下是AEM/Vue组件示例:

      <simple-counter inline-template>
        <button v-bind:style="style" v-on:click="add">${properties.clicksText || 'clicks: '} {{ counter }}</button>
      </simple-counter>
    

    JS:

    注意,它在JS中没有模板,因为它在上面是内联的

    Vue.component('simple-counter', {
      data: function() {
        return {
          counter: 0,
          style: {
            color: 'red',
            width: '200px'
          }
        }
      },
      methods: {
        add: function() {
          this.counter = this.counter + 1;
          this.style.color = this.style.color == 'red' ? 'green' : 'red';
        }
      }
    })
    

    您可以以这种方式构建更多AEM组件,然后在客户端库结束时,当所有Vue组件都已注册后,您可以运行:

    newvue({el:'#app'})

    当然,这是假设您的页面主体或其他父元素的id为:app

    第二部分,如何在提交创作对话框后重新装载组件,您可以刷新页面。

    我有一个关于如何在不刷新页面的情况下重新装载组件的问题,这里的基本思想是在组件中添加afteredit事件,并仅在新修改的组件上运行新的Vue实例。。。还在做那件事吗

    燕钟展
    2023-03-14

    应该只有一个Vue实例。

    • 我建议您在body标记中创建一个空的Vue实例
    • 所有现有的Vue实例都转换为组件
    • 在根Vue实例中注册所有组件

    使用这种方法,可以将一个组件嵌套到另一个组件中

     类似资料:
    • 构造器 每个 Vue.js 应用都是通过构造函数 Vue 创建一个 Vue 的根实例 启动的: var vm = new Vue({ // 选项 }) 虽然没有完全遵循 MVVM 模式, Vue 的设计无疑受到了它的启发。因此在文档中经常会使用 vm 这个变量名表示 Vue 实例。 在实例化 Vue 时,需要传入一个选项对象,它可以包含数据、模板、挂载元素、方法、生命周期钩子等选项。全部的选

    • SSR 渲染一个 Vue 实例的基本步骤如下: // 第 1 步:创建一个 Vue 实例 const Vue = require('vue') const app = new Vue({ template: `<div>Hello World</div>` }) // 第 2 步:创建一个 renderer const renderer = require('vue-server-rend

    • 1. 前言 本节开始我们将正式进行 Vue 基础知识的学习。本小节我们将先介绍什么是 Vue 实例,包括如何创建 Vue 实例,Vue 实例上的属性参数,以及如何使用 Vue 开始工作。Vue 实例上的属性和方法很多,本小节我们不会详细介绍所有的属性和方法,同学们目前只需要了解什么是 Vue 实例以及如何创建它。 2. 慕课解释 每个 Vue 应用都是通过用 Vue 函数创建一个新的 Vue 实例

    • 我使用带有单个文件组件的网页包。 我的菜单标题中有一个Vue实例,用于显示购物车下拉列表: 我在同一页面中有另一个Vue实例(产品目录): 我想$emit一个事件从一个实例到另一个实例:当目录更改时,我想调用ShoppingCart中的函数。 我测试eventHub: 所以我在每个实例上导入事件: 目录中: 在购物车: 但这行不通。仅当$on和$emit位于Vue的同一实例中时,它才起作用。 我认

    • 本文向大家介绍vue+element-ui+ajax实现一个表格的实例,包括了vue+element-ui+ajax实现一个表格的实例的使用技巧和注意事项,需要的朋友参考一下 实例如下: 效果图: 以上这篇vue+element-ui+ajax实现一个表格的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。

    • 本文向大家介绍vue props 一次传多个值实例,包括了vue props 一次传多个值实例的使用技巧和注意事项,需要的朋友参考一下 数组: <custom-element :whatever="[...array]"></custom-element> 对象: <custom-element :whatever="{...obj}"></custom-element> 或者: <custom-