в angular2 у меня есть компонент addproperty (дедушка) и компонент addproperty2 (родительский) и компонент флажка (дочерний). В дедушке и дедушке есть форма с кнопкой добавить, если пользователь нажмите флажки, которые находятся в родительском компоненте, и снова появится кнопка добавить. дедушка html:
<div *ngIf="page2">
<add-property-page2></add-property-page2>
</div>
<div class="text-center col-sm-12">
<button [disabled]="!propertyForm.form.valid"
(click)="onSubmit($event,value,amlak)"
type="submit" class="btn btn-success">Add
</button>
</div>
Это означает, что если page2 имеет значение true, он показывает родительский html внутри дедушки и бабушки. прародительский компонент:
import {Component, OnInit, ViewChild, ViewEncapsulation,Input} from '@angular/core';
import {AddPropertyPage2Component} from "./add-paroperty-page2.component";
@Component({
selector: 'add-property',
templateUrl: './add-property.html'
})
export class AddPropertyComponent implements OnInit {
private page2: boolean;
@ViewChild(AddPropertyPage2Component)
private checkbox: AddPropertyPage2Component;
onSubmit($event: any) {
$event.preventDefault();
if(this.page2){
this.amlak.emkanat = this.checkbox.emkan.filter(e=>e.checked == true);
}
}
родительский html:
<div class="col-md-12 form-group">
<checkbox></checkbox>
</div>
родительский компонент:
import {Component, OnInit,ViewChild} from '@angular/core';
import {CheckBoxComponent} from './checkbox.component';
@Component({
selector:'add-property-page2',
templateUrl:'./add-property-page2.html',
})
export class AddPropertyPage2Component{
@ViewChild(CheckBoxComponent)
private checkboxcomponent: CheckBoxComponent;
public emkan = this.checkboxcomponent.emkanats;
}
и компонент флажка:
import {Component, OnInit} from '@angular/core';
import {checkBoxClass} from '../models/checkboxClass';
import {CheckBoxService} from '../services/checkbox.service';
@Component({
selector: 'checkbox',
styleUrls: ['./checkbox.css'],
templateUrl: './checkbox.html',
})
export class CheckBoxComponent implements OnInit {
public emkanats: checkBoxClass[];
constructor(private checkboxService: CheckBoxService) {
}
ngOnInit() {
this.checkboxService.getCheckboxes().subscribe(res => this.emkanats =
res);
}
}
это класс флажка:
export class checkBoxClass {
title:string;
value:string;
checked:boolean;
image:number;
}
служба флажков:
import {Injectable} from '@angular/core';
import {checkBoxClass} from '../models/checkboxClass';
import {Http,Headers,Response} from '@angular/http';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/catch';
@Injectable() export class CheckBoxService{
private checkboxUrl:string = '../../checkbox.json';
constructor(private http:Http){}
getCheckboxes(): Observable<checkBoxClass[]> {
return this.http.get(this.checkboxUrl)
.map(response => response.json())
}
}
Теперь ошибка такова: Невозможно прочитать свойство 'emkan' неопределенного. Я использовал метод viewchild в двух компонентах, но не знаю причины этой ошибки. Не могли бы вы помочь мне решить эту проблему, используя метод viewchild? Большое спасибо.