@Output 的 Angular2 dynamiccomponentloader 参数
Angular2 dynamiccomponentloader parameters for @Output
据我了解,您为刚刚使用 DynamicComponentLoader 添加到 DOM 的组件设置 @Input 变量的方式是在调用类似 loadIntoLocation:
的内容后使用 promise 块
this.dcl.loadIntoLocation( Lorem, this.elRef, 'target')
.then( cmpRef => {
cmpRef.instance.foo = _self.baz;
});
export class Lorem {
public @Input() foo : String;
...
我的问题是使用动态组件加载器时如何设置@Output?
this.dcl.loadIntoLocation( Lorem, this.elRef, 'target')
.then( cmpRef => {
cmpRef.instance.foo = _self.baz;
cmpRef.instance.changer = _self.change($event);
});
export class Lorem {
public @Input() foo : String;
@Output() changer = new EventEmitter();
...
...
this.changer.emit("event");
非常感谢您提供的帮助。
我会利用 subscribe 方法而不是 link 到 _self.change($event) 函数的结果,如下所示:
cmpRef.instance.changer.subscribe(($event) => _self.change($event));
自从 beta.16 loadIntoLocation 被删除后,在我的示例中我将使用 loadNextToLocation,它需要一个 ViewContainerRef。
应用组件
import {Component, DynamicComponentLoader, ViewChild, ViewContainerRef} from 'angular2/core';
@Component({
selector: 'my-app',
providers: [],
template: `
<div>
<h2>Hello {{name}}</h2>
<div #target></div>
</div>
`,
directives: []
})
export class App {
baz: string = "Test string";
@ViewChild('target', {read: ViewContainerRef}) target : ViewContainerRef;
constructor(private dcl: DynamicComponentLoader) {
this.name = 'Angular2'
}
ngAfterViewInit() {
this.dcl.loadNextToLocation(Lorem, this.target)
.then(cmpRef => {
cmpRef.instance.foo = this.baz;
cmpRef.instance.changer.subscribe(($event) => this.change($event));
});
}
change($event) {
alert($event);
}
}
定理分量
import {Component, Input, Output, EventEmitter} from 'angular2/core';
@Component({
selector: 'lorem',
template: `
<div>{{foo}}</div>
<button (click)="run()">Run</button>`
})
class Lorem {
@Input() foo: String;
@Output() changer = new EventEmitter();
run() {
this.changer.emit("event from child");
}
}
希望对你有帮助。
据我了解,您为刚刚使用 DynamicComponentLoader 添加到 DOM 的组件设置 @Input 变量的方式是在调用类似 loadIntoLocation:
的内容后使用 promise 块this.dcl.loadIntoLocation( Lorem, this.elRef, 'target')
.then( cmpRef => {
cmpRef.instance.foo = _self.baz;
});
export class Lorem {
public @Input() foo : String;
...
我的问题是使用动态组件加载器时如何设置@Output?
this.dcl.loadIntoLocation( Lorem, this.elRef, 'target')
.then( cmpRef => {
cmpRef.instance.foo = _self.baz;
cmpRef.instance.changer = _self.change($event);
});
export class Lorem {
public @Input() foo : String;
@Output() changer = new EventEmitter();
...
...
this.changer.emit("event");
非常感谢您提供的帮助。
我会利用 subscribe 方法而不是 link 到 _self.change($event) 函数的结果,如下所示:
cmpRef.instance.changer.subscribe(($event) => _self.change($event));
自从 beta.16 loadIntoLocation 被删除后,在我的示例中我将使用 loadNextToLocation,它需要一个 ViewContainerRef。
应用组件
import {Component, DynamicComponentLoader, ViewChild, ViewContainerRef} from 'angular2/core';
@Component({
selector: 'my-app',
providers: [],
template: `
<div>
<h2>Hello {{name}}</h2>
<div #target></div>
</div>
`,
directives: []
})
export class App {
baz: string = "Test string";
@ViewChild('target', {read: ViewContainerRef}) target : ViewContainerRef;
constructor(private dcl: DynamicComponentLoader) {
this.name = 'Angular2'
}
ngAfterViewInit() {
this.dcl.loadNextToLocation(Lorem, this.target)
.then(cmpRef => {
cmpRef.instance.foo = this.baz;
cmpRef.instance.changer.subscribe(($event) => this.change($event));
});
}
change($event) {
alert($event);
}
}
定理分量
import {Component, Input, Output, EventEmitter} from 'angular2/core';
@Component({
selector: 'lorem',
template: `
<div>{{foo}}</div>
<button (click)="run()">Run</button>`
})
class Lorem {
@Input() foo: String;
@Output() changer = new EventEmitter();
run() {
this.changer.emit("event from child");
}
}
希望对你有帮助。