Tôi đang cố gắng học Angular 2.
Tôi muốn truy cập vào một thành phần con từ một thành phần cha mẹ bằng cách sử dụng Chú thích @ViewChild .
Đây là một số dòng mã:
Trong BodyContent.ts tôi có:
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);
}
}
trong khi trong 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(){};
}
Cuối cùng ở đây các mẫu (như được đề xuất trong các ý kiến):
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>
Mẫu FilterTiles.html được tải chính xác vào thẻ ico-filter-gạch (thực sự tôi có thể thấy tiêu đề).
Lưu ý: lớp BodyContent được chèn vào bên trong một mẫu khác (Body) bằng DynamicComponetLoader: dcl.loadAsRoot (BodyContent, '# ico-bodyContent', kim phun):
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);
}
}
Vấn đề là khi tôi cố gắng ghi ft
vào nhật ký giao diện điều khiển, tôi nhận được undefined
và tất nhiên tôi gặp một ngoại lệ khi tôi cố gắng đẩy thứ gì đó vào trong mảng "gạch": 'không có thuộc tính gạch cho "không xác định"' .
Một điều nữa: Thành phần FilterTiles dường như được tải chính xác, vì tôi có thể thấy mẫu html cho nó.
Bất kì lời đề nghị nào? Cảm ơn
ft
sẽ không được đặt trong hàm tạo, nhưng trong trình xử lý sự kiện nhấp chuột, nó sẽ được đặt.
loadAsRoot
, có một vấn đề đã biết với phát hiện thay đổi. Chỉ để đảm bảo thử sử dụng loadNextToLocation
hoặc loadIntoLocation
.
loadAsRoot
. Một khi tôi thay thế với loadIntoLocation
vấn đề đã được giải quyết. Nếu bạn đưa ra nhận xét của mình là câu trả lời, tôi có thể đánh dấu nó là được chấp nhận