मैं अंतिम रिलीज 2.0.0 में गतिशील रूप से एक घटक लोड करने की कोशिश कर रहा हूं।मौजूदा घटकों को गतिशील रूप से लोड करें कोणीय 2 अंतिम रिलीज
RC5 मैं निम्नलिखित कोड का उपयोग कर लोड हो रहा था का उपयोग करना: नियंत्रण लोड करने के लिए
एक निर्देश बनाएं:
import {
CheckboxComponent, CheckboxListComponent,DatePickerComponent
} from '../components/';
@Directive({
selector: '[ctrl-factory]'
})
export class ControlFactoryDirective implements OnChanges {
@Input() model: any;
constructor(private vcRef: ViewContainerRef, private resolver: ComponentResolver) {
}
create(cp) {
this.resolver.resolveComponent(cp)
.then(factory => {
const injector = ReflectiveInjector.fromResolvedProviders([], this.vcRef.parentInjector);
this.vcRef.createComponent(factory, 0, injector, []);
let ch = this.vcRef.createComponent(factory, 0, injector, []).instance;
ch.model = this.model;
});
}
ngOnChanges() {
if (!this.model) return;
switch (this.model.type) {
case 'checkbox':
this.create(CheckboxComponent);
break;
case 'checkboxlist':
this.create(CheckboxListComponent);
break;
case 'datepicker':
this.create(DatePickerComponent);
break;
default:
break;
}
}
}
तो इस तरह मेरा पेज में कि निर्देश भरी हुई:
<div ctrl-factory *ngFor="let child of page.childrens" [model]="child"></div>
लेकिन आरसी 5 से 2.0.0 अंतिम रिलीज से अपडेट करने के बाद, रिज़ॉलर अब मौजूद नहीं है, संकलक द्वारा प्रतिस्थापित किया गया था।
मुझे विभिन्न स्थानों का उपयोग करके इसे लोड करने के तरीके दिखाने वाले स्थानों का भार मिलता है, लेकिन वे सभी जटिल हैं और मैं इसे काम नहीं कर सका।
उदाहरण के लिए यह लो: How can I use/create dynamic template to compile dynamic Component with Angular 2.0?
ऐसा नहीं है कि परिदृश्य के लिए और अधिक विशिष्ट लग रहा है, मेरी एक मैं सिर्फ घटक लोड और सेट एक @Input मॉडल कहा जाता की जरूरत है।
एक चीज जब मैं कोशिश कर रहा था मुझे प्रत्येक घटक के लिए गतिशील रूप से एक मॉड्यूल बनाना था, फिर उसमें घटक जोड़ें। लेकिन फिर मुझे यह कहने में समस्याएं थीं कि घटक एक से अधिक मॉड्यूल में सेट किया जा रहा था, किसी भी जगह पर काम करने की कोशिश नहीं कर रहा था।
दिखाए गए कोड का प्रमुख हिस्सा है, मैं इस लिंक से मिलती है: http://blog.lacolaco.net/post/dynamic-component-creation-in-angular-2-rc-5/
और परिवर्तन की एक जोड़ी किया था।
अद्यतन
मैं निम्नलिखित दृष्टिकोण का उपयोग कर, यह काम करने के लिए प्रबंधन:
बनाने विधि
private create(cp) {
@NgModule({
imports: [BrowserModule, ControlsModule],
declarations: []
})
class DynamicModule {}
this.compiler.compileModuleAndAllComponentsAsync(DynamicModule)
.then(({componentFactories}) => {
const compFactory = componentFactories.find(x => x.componentType === cp);
const injector = ReflectiveInjector.fromResolvedProviders([], this.vcRef.parentInjector);
const cmpRef = this.vcRef.createComponent(compFactory, 0, injector, []);
cmpRef.instance.model = this.model;
});
}
अधिकांश स्थानों मैंने पाया करने के लिए बदल दिया गया है, घटक को सेट करें और इसे डायनामिक मॉड्यूल पर सेट करें, इसके साथ समस्या तब होती है जब आप पहले से ही एक ही मॉड्यूल में एक ही घटक घोषित कर रहे हैं, कोणीय कंप करने जा रहा है के बारे में लापरवाही मेरे मामले में समाधान मेरा नियंत्रण मॉड्यूल आयात करना था जिसमें मेरे सभी नियंत्रण निर्यात किए जा रहे थे।
मैं एक जैसी चीज़ बनाने की कोशिश कर रहा हूं। मेरे पास एक JSON फ़ाइल है जो कक्षाओं और व्याख्यान की उनकी सूची लोड करती है। कक्षाएं एनएवी बार में जोड़ दी जाती हैं और व्याख्यान एक विस्तार के रूप में सूची के रूप में जोड़े जाते हैं। व्याख्यान पर क्लिक करने पर, एक घटक को विस्तार दृश्य में लोड किया जाना चाहिए। प्रत्येक व्याख्यान के लिए, एक अलग घटक होता है और मैं आपके उदाहरण जैसे घटक को लोड करने के बजाय प्रत्येक व्याख्यान (और राउटर-आउटलेट) के लिए मॉड्यूल या राउटर लिंक बनाने की सोच रहा था। मैं अभी भी चीजों को लोड करने का सबसे अच्छा तरीका जानने की कोशिश कर रहा हूं। – Atieh