如何导入同名但路径不同的组件?

Posted

技术标签:

【中文标题】如何导入同名但路径不同的组件?【英文标题】:How to import components with the same name but different path? 【发布时间】:2022-01-21 00:14:54 【问题描述】:

我有以下代码,到目前为止一切顺利:

import  Route  from '@vaadin/router';
import './views/object/list-view';
import './main-layout.ts';

export type ViewRoute = Route & 
  title?: string;
  children?: ViewRoute[];
;

export const views: ViewRoute[] = [
  
    path: 'object',
    component: 'list-view',
    title: 'Objects',
  ,
  
    path: 'dashboard',
    component: 'dashboard-view',
    title: 'Dashboard',
    action: async () => 
      await import('./views/dashboard/dashboard-view');
    ,
  ,
];

export const routes: ViewRoute[] = [
  
    path: '',
    component: 'main-layout',
    children: views,
  ,
];

但是当如下添加额外的import './views/object2/list-view';时,它不起作用:

import  Route  from '@vaadin/router';
import './views/object/list-view';
import './views/object2/list-view';
import './main-layout.ts';

export type ViewRoute = Route & 
  title?: string;
  children?: ViewRoute[];
;

export const views: ViewRoute[] = [
  
    path: 'object',
    component: 'list-view',
    title: 'Object',
  ,
  
    path: 'object2',
    component: 'list-view',
    title: 'Object2',
  ,
  
    path: 'dashboard',
    component: 'dashboard-view',
    title: 'Dashboard',
    action: async () => 
      await import('./views/dashboard/dashboard-view');
    ,
  ,
];

export const routes: ViewRoute[] = [
  
    path: '',
    component: 'main-layout',
    children: views,
  ,
];

我认为它不起作用,因为导入了组件的名称。有没有办法在不更改组件名称的情况下澄清此文件中的差异?

我试过了:

component: './views/object2/list-view'

但还是不行。

在此先感谢女士们先生们。

【问题讨论】:

您还没有解释究竟什么是“不起作用”。从具有相同文件名的两个文件导入没有任何违法行为。告诉我们实际损坏的是什么,然后我们可以为您提供帮助。我建议你在“我认为它不起作用,因为......”这句话之前解释一下。 可以解决导入的名称冲突。 ***.com/questions/39610294/…***.com/questions/40675222/… @Inigo 使用这个文件,我正在创建路由并渲染组件,因为组件具有相同的名称,所以路由不起作用。 @Avec 将尝试使用此别名选项并通知您 仅当您从每个文件中导入单个项目时,别名选项才有效。但是您还没有告诉我们您要导入的内容(这是我上面的问题)。因为你还没有告诉我们,我不得不在下面的答案中猜测。以后请更具体。 【参考方案1】:

你还没有解释究竟什么是“不起作用”,所以你强迫我猜测。从具有相同文件名的两个文件导入没有任何非法或冲突。重要的是您要导入的每个文件中导出项目的名称。

您的三个导入语句实际上并未导入任何导出

在您的四个导入语句中,只有第一个导入导出的项目Route。其他三个是"side-effect imports" only。

import  Route  from '@vaadin/router';
import './views/object/list-view';
import './views/object2/list-view';
import './main-layout.ts';

如果您打算从每个文件中导入所有内容

import * as list-view from './views/object/list-view';
import * as list-view2 from './views/object2/list-view';
import * as main-layout from './main-layout.ts';

这会将整个模块导入到单个变量中。然后,您可以通过该变量引用所有单独的导出,例如list-view.modellist-view.item。与任何变量一样,请确保它们具有唯一的名称。

导入同名的单个导出

import list-object from './views/object/list-view';
import list-object as list-object2 from './views/object2/list-view';

这仅从每个 list-view 文件中导入 list-object 导出,并将第二个重命名为 list-object2 以在此文件中为其提供唯一名称。

导入具有唯一名称的默认导出:

假设您的 list-view 导入都有默认导出,这就是您想要导入的全部内容。这是导入默认导出的方式:

import list-view from './views/object/list-view'
import list-view2 from './views/object2/list-view'

您可以为默认导出指定任何名称(它们不会以任何名称导出)。让它们独一无二。

【讨论】:

【参考方案2】:

我在list-view 组件@customElement('object2-list-view') 上使用@customElement('object-list-view') 做到了这一点

用这个符号我可以阐明组件之间的区别

现在我可以使用了


    path: 'object',
    component: 'object-list-view',
    title: 'Object',
  ,


    path: 'object2',
    component: 'object2-list-view',
    title: 'Object2',
  

非常感谢您的帮助。

【讨论】:

问题是,您没有准确解释您的问题中什么不起作用,现在在您的回答中,不清楚您实际修复的方式和内容,因此这个问题和答案以后不太可能帮助别人,这就是Stack Overflow的目的。 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。

以上是关于如何导入同名但路径不同的组件?的主要内容,如果未能解决你的问题,请参考以下文章

如何在plugin.xml中添加同名但不同文件夹的资源?

如何导入和使用不同的同名包

在反应中,当路由路径不同但组件相同时。如何防止重新安装?

Angular2 2方式绑定中同名的自定义输入和输出

当我们有多个同名但属性不同的元素时,如何使用 Xdocument 从 xml 中删除一个元素

不同的 SVG 图标呈现相同的效果?