在 Angular 2+ 中,使用路由器插座和嵌套组件有什么区别

In Angular 2+ what is the difference between using a router outlet and nested components

我正在与其他一些开发人员一起开发 Angular 5 应用程序,我意识到我设置组件的方式与团队中其他一些人的方式不同正在做。我不知道哪种方式更好,甚至不知道这两种方式之间的真正区别是什么。这是我正在做的事情:

在我的 app-routing.module.ts 中,我有一些路由设置如下:

const routes: Routes = [
  {
    path: 'parent',
    component: ParentComponent,
    children: [
      { path: 'child', component: ChildComponent }
    ]
  }
]

然后我的 parent 模板看起来像这样:

<div>
  ... a bunch of html
  <router-outlet></router-outlet>
  ... more html
</div>

child 看起来像这样:

<div>
  ... irrelevant html
</div>

虽然此方法适用于我的特定用例,但请务必注意,在我的用例中,child 元素并未从 parent 获取大量数据。在我的设置中,任何需要从 parent 到 child 的通信都是通过共享服务完成的。

相比之下,我的一个同事是这样设置他的类似结构的:

注意,我不会给你看他的路线,因为只有一条路线,没有parent/child关系。这里是 parent html:

<div>
  ...some html
  <app-child [child_referenceable_data_object]="parent_data_object"></app-child>
  ...more html
</div>

现在是 child:

<div>
  ...html
  <div [ngClass]="child_referenceable_data_object.class">whatever</div>
  ...more html
</div>

这对他有用,因为他必须将大量数据传递到 child。显然这两种方法都有它们的 advantages/disadvantages,但它们到底是什么?

编辑。我刚刚意识到我并没有真正解决我的问题,所以我将在这里进行说明。我上面显示的是系统当前的设置方式。在我同事的代码中,parent 是一个事物列表,child 是其中一个事物的详细视图。 child 只有在您单击列表中的元素之一时才会显示。

我现在需要打开我的同事页面,其中一个 children 已经打开。因此,我似乎需要修改他的代码以使用我在代码中使用的嵌套路由,但是由于他将数据从 parent 传递到 child 的方式,这很困难。

他目前正在使用一项服务获取 parent 列表的所有数据列表,然后将该数据的一个元素传递给 child。我在想某种服务也是我的解决方案,但不确定。

如果您的页面包含动态内容,您将使用 router-outlet。

假设您有一个布局组件,它有一个工具栏、侧边栏和内容,与任何管理仪表板非常相似。在那种情况下,router-outlet 是正确的选择,因为页面将保持不变,变化的部分是内容。

如果两者直接相关,例如产品列表>产品详细信息关系,则应使用父>子方式。

请注意,这两种方式相似,如果您没有通过该服务获取信息,则意味着您的服务或处理和传递数据的方式有问题。