具有多个子组件实例的 Angular2 父组件
Angular2 Parent Component with multiple instances of child component
我有一个父组件,其模板引用同一子组件的多个实例。子组件将具有相同的 component/template 实现,但应多次实例化并呈现不同的数据集。我查看了很多像 这样的帖子,但它们似乎都使用了已弃用的指令组件属性。
parent.template.html
<child-component data="foo"></child-component>
<child-component data="baz"></child-component>
data.service.ts
import { Injectable } from '@angular/core';
@Injectable()
export class DataService {
getFooData(): Object {
return { name: 'Foo' }
}
getBazData(): Object {
return { name: 'Baz' }
}
}
child.template.html
<h1>{{objectToRender.name}}</h1>
child.component.ts
import { Component, Input, OnInit } from '@angular/core';
import { DataService } from './data.service';
@Component({
selector: 'child-component',
templateUrl: 'child.template.html',
providers: [ DataService ]
})
export class ChildComponent implements OnInit {
@Input() data: String;
objectToRender: Object;
ds: DataService
constructor( private dataService: DataService ) {
this.ds = dataService;
}
ngOnInit(){
switch( this.data ) {
case 'foo':
this.objectToRender = this.ds.getFooData();
case 'baz':
this.objectToRender = this.ds.getBazData();
}
}
}
app.module.ts
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { AppComponent } from './app.component';
import { ParentComponent} from './parent.component';
import { ChildComponent } from './child.component';
@NgModule({
imports: [ BrowserModule ],
declarations: [ AppComponent, ParentComponent, ChildComponent ],
bootstrap: [ AppComponent ]
})
export class AppModule { }
结果:
巴兹
巴兹
预计:
福
巴兹
在这个 Plunker 中可以看到我的问题的简化版本。我一起省略了模板文件,并使用根应用程序组件作为父组件。
https://plnkr.co/edit/QI5lGH3S9a5o3b1ajPBl?p=preview
非常感谢!
缺少的是break;
switch( this.data ) {
case 'foo':
this.objectToRender = this.ds.getFooData();
break;
case 'baz':
this.objectToRender = this.ds.getBazData();
break;
}
我有一个父组件,其模板引用同一子组件的多个实例。子组件将具有相同的 component/template 实现,但应多次实例化并呈现不同的数据集。我查看了很多像
parent.template.html
<child-component data="foo"></child-component>
<child-component data="baz"></child-component>
data.service.ts
import { Injectable } from '@angular/core';
@Injectable()
export class DataService {
getFooData(): Object {
return { name: 'Foo' }
}
getBazData(): Object {
return { name: 'Baz' }
}
}
child.template.html
<h1>{{objectToRender.name}}</h1>
child.component.ts
import { Component, Input, OnInit } from '@angular/core';
import { DataService } from './data.service';
@Component({
selector: 'child-component',
templateUrl: 'child.template.html',
providers: [ DataService ]
})
export class ChildComponent implements OnInit {
@Input() data: String;
objectToRender: Object;
ds: DataService
constructor( private dataService: DataService ) {
this.ds = dataService;
}
ngOnInit(){
switch( this.data ) {
case 'foo':
this.objectToRender = this.ds.getFooData();
case 'baz':
this.objectToRender = this.ds.getBazData();
}
}
}
app.module.ts
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { AppComponent } from './app.component';
import { ParentComponent} from './parent.component';
import { ChildComponent } from './child.component';
@NgModule({
imports: [ BrowserModule ],
declarations: [ AppComponent, ParentComponent, ChildComponent ],
bootstrap: [ AppComponent ]
})
export class AppModule { }
结果: 巴兹 巴兹
预计: 福 巴兹
在这个 Plunker 中可以看到我的问题的简化版本。我一起省略了模板文件,并使用根应用程序组件作为父组件。 https://plnkr.co/edit/QI5lGH3S9a5o3b1ajPBl?p=preview
非常感谢!
缺少的是break;
switch( this.data ) {
case 'foo':
this.objectToRender = this.ds.getFooData();
break;
case 'baz':
this.objectToRender = this.ds.getBazData();
break;
}