मैं कोणीय 2 सीखने की कोशिश कर रहा हूं।
मैं @ViewChild एनोटेशन का उपयोग करके एक मूल घटक से एक बच्चे के घटक तक पहुंचना चाहूंगा ।
यहाँ कोड की कुछ पंक्तियाँ हैं:
में BodyContent.ts मेरे पास है:
import {ViewChild, Component, Injectable} from 'angular2/core';
import {FilterTiles} from '../Components/FilterTiles/FilterTiles';
@Component({
selector: 'ico-body-content'
, templateUrl: 'App/Pages/Filters/BodyContent/BodyContent.html'
, directives: [FilterTiles]
})
export class BodyContent {
@ViewChild(FilterTiles) ft:FilterTiles;
public onClickSidebar(clickedElement: string) {
console.log(this.ft);
var startingFilter = {
title: 'cognomi',
values: [
'griffin'
, 'simpson'
]}
this.ft.tiles.push(startingFilter);
}
}
जबकि FilterTiles.ts में :
import {Component} from 'angular2/core';
@Component({
selector: 'ico-filter-tiles'
,templateUrl: 'App/Pages/Filters/Components/FilterTiles/FilterTiles.html'
})
export class FilterTiles {
public tiles = [];
public constructor(){};
}
अंत में यहाँ टेम्प्लेट (जैसा कि टिप्पणियों में सुझाया गया है):
BodyContent.html
<div (click)="onClickSidebar()" class="row" style="height:200px; background-color:red;">
<ico-filter-tiles></ico-filter-tiles>
</div>
FilterTiles.html
<h1>Tiles loaded</h1>
<div *ngFor="#tile of tiles" class="col-md-4">
... stuff ...
</div>
FilterTiles.html टेम्प्लेट को सही ढंग से ico- filter- टाइल्स टैग में लोड किया गया है (वास्तव में मैं हेडर देखने में सक्षम हूं)।
नोट: BodyContent वर्ग को एक अन्य टेम्पलेट (Body) के अंदर इंजेक्ट किया जा रहा है जो कि DynamicsComponetLoader का उपयोग कर रहा है: dcl.loadAsRoot (BodyContent, '# ico-bodyContent', इंजेक्टर):
import {ViewChild, Component, DynamicComponentLoader, Injector} from 'angular2/core';
import {Body} from '../../Layout/Dashboard/Body/Body';
import {BodyContent} from './BodyContent/BodyContent';
@Component({
selector: 'filters'
, templateUrl: 'App/Pages/Filters/Filters.html'
, directives: [Body, Sidebar, Navbar]
})
export class Filters {
constructor(dcl: DynamicComponentLoader, injector: Injector) {
dcl.loadAsRoot(BodyContent, '#ico-bodyContent', injector);
dcl.loadAsRoot(SidebarContent, '#ico-sidebarContent', injector);
}
}
समस्या यह है कि जब मैं ft
कंसोल लॉग में लिखने की कोशिश करता हूं, मुझे मिलता है undefined
, और निश्चित रूप से मुझे एक अपवाद मिलता है जब मैं "टाइल" सरणी के अंदर कुछ धक्का देने की कोशिश करता हूं: '' अपरिभाषित '' के लिए कोई संपत्ति टाइल नहीं ।
एक और बात: FilterTiles घटक सही ढंग से भरा हुआ लगता है, क्योंकि मैं इसके लिए html टेम्पलेट देख पा रहा हूं।
कोई उपाय? धन्यवाद
ft
कंस्ट्रक्टर में सेट नहीं किया जाएगा, लेकिन एक क्लिक ईवेंट हैंडलर में इसे पहले ही सेट कर दिया जाएगा।
loadAsRoot
, जिसमें परिवर्तन का पता लगाने के साथ एक ज्ञात समस्या है । बस यह सुनिश्चित कर लें उपयोग करने का प्रयास करने के लिए loadNextToLocation
या loadIntoLocation
।
loadAsRoot
। एक बार जब मैंने loadIntoLocation
समस्या को हल कर लिया था। यदि आप अपनी टिप्पणी को उत्तर के रूप में बनाते हैं तो मैं इसे स्वीकार कर सकता हूं