http://plnkr.co/edit/AcQM5h如何从儿童将数据传递给家长,如果孩子组件动态组件
我创建了一个plunker。结构:我有一个app.ts和一个buttons.component。当我点击buttons.component时,我将数据传递给app.ts,并将app.ts传递给cats-component,在这里我使用数据。 因此,我基本上能够上到父级和下级的其他文件路径。
我被卡住了,因为我无法将数据从猫组件传递到app.ts,因为猫组件正在飞行中生成。
这是猫科动物成分:
import {Component, Injector, View, Output, EventEmitter } from '@angular/core';
@Component({
selector: 'hello-world',
template: `
<div>This is the Child Component Hello world</div>
{{colordata}}
<input value="send me now" #catsinput />
<button (click)="getdata(catsinput.value)">Give to parent</button>
`,
outputs: ['passdatatoParent']
})
export default class catsComponent {
colordata = 0;
passdatatoParent: EventEmitter<any> = new EventEmitter();
getdata(value){
this.passdatatoParent.emit(value);
console.log('get cats data', value)
}
constructor(private injector: Injector) {
this.colordata = this.injector.get('colordata');
}
}
这是父:
import {Component, NgModule, Input, Output, EventEmitter } from '@angular/core'
import {BrowserModule} from '@angular/platform-browser'
import catsComponent from './cats-component';
import dogsComponent from './dogs-component';
import DynamicComponent from './dynamic-component';
import DynamicComponent from './dynamic-component';
import {ButtonsComponent} from './buttons.component';
import {componentList} from './components-list';
import * as _ from "lodash";
@Component({
selector: 'my-app',
template: `
<div>
<buttons (passdata)="getthis($event)" ></buttons>
<button (click)="loadDogs()">Load Dogs</button>
<dynamic-component [componentData]="componentData" (passdatatoParent)="getChildEvent($event)"></dynamic-component>
<!--<dynamic-component [componentData]="componentData" ></dynamic-component>-->
</div>
`,
})
export class AppComponent {
componentData = null;
components:any = componentList;
showvalue: string;
getthis(evt){
console.log(this.components)
console.log('here it is' , evt);
this.showvalue = evt;
this.componentData = {
component: catsComponent,
inputs: {
colordata: evt
}
};
}
getChildEvent(evt){
console.log('got this from the child', evt) // NOT ABLE TO RECIEVE DATA
}
constructor(){
}
loadDogs(){
this.componentData = {
component: dogsComponent,
inputs: {
showNum: 2
}
};
}
}
@NgModule({
imports: [ BrowserModule ],
declarations: [ AppComponent, catsComponent, dogsComponent, DynamicComponent, ButtonsComponent ],
bootstrap: [ AppComponent ]
})
export class AppModule {}
根据你的第一个结果我查了一下是:ElementRef看什么FUNC并得到了“行政法规对DOM的直接访问可以使你的应用程序更容易受到XSS攻击。”在角度网站上: https://angular.io/docs/js/latest/api/core/index/ElementRef-class.html 任何想法?真的有风险吗? –
如果你不打算使用webworker或服务器渲染,那么我在这里看不到任何问题 – yurzui
https://angular.io/docs/ts/latest/guide/ngmodule.html#!#declare-directives-and -components – yurzui