問題を解決するためにSOを検索しています。 を使用して部署コンポーネントにフルレイアウト・コンポーネントからのデータを渡すために全体の問題がしようとしているAngular2の2つのコンポーネント間でデータを渡すとバインディングエラーが発生する
部門
フルレイアウト:
は、私は2つのコンポーネントを持っています
@Inputs()
。以下では、まず自分のフォルダ構造とそれから私が持っているコードを示します。
構造departments.component.ts
import {Component, OnInit, Input} from '@angular/core'; @Component({ selector: 'app-departments', templateUrl: './departments.component.html', inputs: ['valueToPass'] }) export class DepartmentsComponent implements OnInit { @Input() valueToPass; public _departments; constructor() { } ngOnInit() { console.log(this.valueToPass.nam); } }
departments.module.ts
// import{...}... // assume necessary imports above @NgModule({ imports: [ DepartmentsRoutingModule, CommonModule, MaterialModule.forRoot() ], declarations: [ DepartmentsComponent ] }) export class DepartmentsModule {}
full-layout.component.ts
import {Component, OnInit} from '@angular/core'; @Component({ selector: 'app-dashboard', templateUrl: './full-layout.component.html', }) export class FullLayoutComponent implements OnInit { public disabled:boolean = false; public status:{isopen:boolean} = {isopen: false}; constructor(){} ngOnInit(): void {} dropDownItems = [ { routerLink: '/departments', name: 'Artshums' }, { routerLink: '/components/social-buttons', name: 'Dentistry' }, { routerLink: '/components/cards', name: 'Law' }, { routerLink: '/components/forms', name: 'IOPPN' }, { routerLink: '/components/modals', name: 'LSM' }, { routerLink: '/departments', name: 'NMS' }, { routerLink: '/components/tables', name: 'Nursing' }, { routerLink: '/components/tabs', name: 'SSPP' }, { routerLink: '/components/tabs', name: 'Health' } ]; onClick(_container: HTMLElement) { //this.clickedElement = _container.innerText; //console.log(this.clickedElement); } }
full-layout.component.html
<ul class="nav-dropdown-items"> <li class="nav-item" *ngFor="let item of dropDownItems"> <a #clicked class="nav-link" routerLinkActive="active" [routerLink]="[item.routerLink]" (click)="onClick(clicked)"> <i class="icon-puzzle"></i>{{item.name}} <app-departments [valueToPass] = "item"></app-departments> </a> </li> </ul>
app.module.ts
// import {...}... // assume necessary imports @NgModule({ imports: [ BrowserModule, AppRoutingModule, DropdownModule.forRoot(), TabsModule.forRoot(), ChartsModule, MaterialModule.forRoot(), HttpModule, JsonpModule, DepartmentsModule ], declarations: [ AppComponent, FullLayoutComponent, SimpleLayoutComponent, NAV_DROPDOWN_DIRECTIVES, BreadcrumbsComponent, SIDEBAR_TOGGLE_DIRECTIVES, AsideToggleDirective ], providers: [{ provide: LocationStrategy, useClass: HashLocationStrategy }], bootstrap: [ AppComponent ] }) export class AppModule { }
私の問題はここにあります。私はこのプログラムを実行すると、私はバインディングエラーを取得し、私はなぜ、どのようにそれを修正するかわからない。
'app-departments'の既知のプロパティではないため、 'valueToPass'にバインドできません。
'app-departments'がAngularコンポーネントで、 'valueToPass'入力がある場合は、このモジュールの一部であることを確認してください。
'app-departments'がWebコンポーネントの場合は、このコンポーネントの '@ NgModule.schemas'に「CUSTOM_ELEMENTS_SCHEMA」を追加して、このメッセージを表示しないようにします。
小さなヘルプは非常に高く評価されます。
ありがとうございました!
本当にあなたは私のヒーローです!私はあなたに敬意を表します!私はあなたが私に言ったことを正確に行い、それは今働く。何百万回もありがとう!また、これは私の質問の一部ではありませんが、変数を印刷すると「未定義」になります。それがどうしていいのか? console.log(this.valueToPass.name)に修正しました。 – DingDong
Re:「未定義」の結果、Angularのライフサイクルフックを調べて、Angularが頻繁に変化する値を捕捉できるかどうかを確認することができます:https://angular.io/docs/ts/latest/guide/lifecycle -hooks.html また、私の元の回答があなたを助けてくれたので、それをアップアップして正しいものとしてマークしてください。ありがとう。 :) – Muirik