我可以在angular2中为一个组件添加两个模板吗?

Par*_*ain 10 angular2-template angular

我有一个组件有一个html和.ts文件.出于某些原因,我必须创建多个页面(HTML)页面.
是否可以为单个类(组件)创建多个(html)页面?
或者是否可以为组件提供动态TemplateUrl?

我的主要动机是提供不同的URL并使用不同的视图(HTML页面)但使用单个类(.ts类即组件)?
我已经看到下面提到的很多问题,但没有找到确切的解决方案 -

我想要这样的东西

{ path: '/Login', component: LogIn, name: "Login"},
{ path: '/Login2', component: LogIn, name: "Login" },
{ path: '/Login3', component: LogIn, name: "Login" }
Run Code Online (Sandbox Code Playgroud)

我想用不同的URL和视图加载相同的组件.

Spi*_*keh 6

这可以通过继承来实现.不同的视图和样式模板,但(基本上)相同的底层组件代码.您仍然需要声明@Component元数据,因此如果您正在使用值访问器等,则还需要重新定义它们.

第一部分:

import { Component, Input, OnInit } from '@angular/core';

import { KeyValuePairBase } from '../../model/key-value-pair-base'

@Component({
  moduleId: module.id,
  selector: 'select-list',
  templateUrl: './select-list.component.html',
  styleUrls: ['./select-list.component.scss']
})
export class SelectListComponent implements OnInit {
  @Input() private data: KeyValuePairBase[];

  constructor() {
    super();
  }

  ngOnInit() {
    if (!this.name) throw new Error("'name' property is required by 'select-list' component");
    if (!this.friendlyName) throw new Error(`'friendlyName' property is required by 'select-list' component '${this.name}'`);
  }
}
Run Code Online (Sandbox Code Playgroud)

第二部分:

import { Component } from '@angular/core';

import { SelectListComponent } from '../select-list/select-list.component'

@Component({
  moduleId: module.id,
  selector: 'radio-list',
  templateUrl: './radio-list.component.html',
  styleUrls: ['./radio-list.component.scss']
})
export class RadioListComponent extends SelectListComponent {
}
Run Code Online (Sandbox Code Playgroud)


Ben*_*ham 2

Angular 的最佳实践是一个组件包含一个模板。如果要将相同的逻辑应用于两个视图,则应在服务内创建该逻辑,并将一项服务用于两个不同的组件视图集。URL 是一个不同的问题,由路由器处理。您应该将组件 A 分配给 URL A,将组件 B 分配给 URL B。

  • 他要求在单个服务类中创建两个具有逻辑的空白组件。为此,您将需要两个不同的 URL。@帕迪普杰恩 (3认同)