Saya mencoba belajar Angular 2.
Saya ingin mengakses komponen anak dari komponen induk menggunakan Anotasi @ViewChild .
Berikut beberapa baris kode:
Di BodyContent.ts saya punya:
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);
}
}
saat di 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(){};
}
Akhirnya di sini templat (seperti yang disarankan dalam komentar):
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>
Templat FilterTiles.html dimuat dengan benar ke tag ico-filter-tiles (memang saya bisa melihat tajuknya).
Catatan: kelas BodyContent disuntikkan ke dalam templat lain (Tubuh) menggunakan DynamicComponetLoader: dcl.loadAsRoot (BodyContent, '# ico-bodyContent', injector):
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);
}
}
Masalahnya adalah ketika saya mencoba menulis ft
ke log konsol, saya dapat undefined
, dan tentu saja saya mendapatkan pengecualian ketika saya mencoba untuk mendorong sesuatu di dalam array "ubin": 'tidak ada ubin properti untuk "tidak terdefinisi" .
Satu hal lagi: Komponen FilterTiles tampaknya dimuat dengan benar, karena saya dapat melihat templat html untuk itu.
Ada saran? Terima kasih
ft
tidak akan diatur dalam konstruktor, tetapi dalam event handler klik itu akan sudah ditetapkan.
loadAsRoot
, yang memiliki masalah yang diketahui dengan deteksi perubahan. Hanya untuk memastikan coba gunakan loadNextToLocation
atau loadIntoLocation
.
loadAsRoot
. Setelah saya diganti dengan loadIntoLocation
masalah terpecahkan. Jika Anda membuat komentar sebagai jawaban, saya dapat menandainya sebagai diterima