gpt4 book ai didi

data-binding - Angular 2 : Two-way data binding on component dynamically inserted using DynamicComponentLoader

转载 作者:太空狗 更新时间:2023-10-29 17:00:08 25 4
gpt4 key购买 nike

我正在开发一个 Angular2 应用程序,我遇到了一个问题:

我有一组可以使用 UI 选择的不同对象。每个对象都有一组选项(不同的对象不同),可以使用 UI 进行编辑。现在,我正在使用 DynamicComponentLoader 为当前选定的对象插入特定组件,因此它可以正确处理其选项。问题是我不知道如何将当前选定对象的数据绑定(bind)到动态插入的选项组件。

@Component({
selector: 'dynamic',
template: `<div>Options:</div>
<div>Property1: <input type="number" /></div>
<div>Property2: <input type="text" /></div>`
// template: `<div>Options:</div>
// <div>Property1: <input type="number" [(ng-model)]="currentSelection.property1" /></div>
// <div>Property2: <input type="text" [(ng-model)]="currentSelection.property1" /></div>`
})
class DynamicComponent {

}


@Component({
selector: 'my-app',
template: `
<div>
<h2>Selected: {{currentSelection.name}}!</h2>
<div #container></div>
</div>
`
})
class App {
currentSelection = {name: 'Selection1', property1: 10, property2: 'test'};

constructor(private loader: DynamicComponentLoader, private elementRef: ElementRef) {
loader.loadIntoLocation(DynamicComponent, elementRef, 'container');
}
}

Here是一个 plunker 来帮助你理解我的问题:

最佳答案

对于 angular2 和 Rxjs,“Observables”几乎总是答案。

如果我正确理解你的问题,你需要让你的 DynamicComponent 成为“Observer”,让你的容器成为“Observable 或更好的Subject(以防你的容器需要订阅另一个 observable 来接收节选自)”。然后,在加载您的动态组件后,将其订阅到您的容器。

每当您的容器上的选择发生变化时,您就会将新选择推送给您的订阅者。这样,您可以加载多个动态组件,所有组件都会收到您的推送。

容器:

class App {
currentSelection = {};
selections = [
{name: 'Selection1', property1: 10, property2: 'test'},
{name: 'Selection2', property1: 20, property2: 'test2'}
];
subject:Subject<any> = new Subject();

constructor(private loader: DynamicComponentLoader, private elementRef: ElementRef) {
}

ngOnInit(){
this.loader.loadIntoLocation(DynamicComponent, this.elementRef, 'container', this.injector)
.then(compRef =>this.subject.subscribe(compRef.instance));
// subscribe after loading the dynamicComponent
}

// set the new selection and push it to subscribers
changeSelection(newSelection){
this.currentSelection = newSelection;
this.subject.next(this.currentSelection);
}
}

观察者:

class DynamicComponent implements Observer{
public currentSelection = {};

next(newSelection){
this.currentSelection = newSelection;
}
}

这是您的 plunker在我的编辑之后工作,“前提是我将导入更改为最新的 Angular beta.6”

我知道这是一个很老的问题。但希望有人会从这个答案中受益。

关于data-binding - Angular 2 : Two-way data binding on component dynamically inserted using DynamicComponentLoader,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33503903/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com