私は自分自身に角度2を教えようとしています(実際は角度4ですが、Googleの番号付けスキームはちょっとファンキーです)。とにかく、これまで私は、angle.ioのサンプルとstackoverflowの質問に答えて、すべてのことを動作させる方法を見つけ出すことができました。しかし、この1つは私を突っ込んでいます。兄弟コンポーネントから別の角度へデータを渡す2
私の問題は、2つの異なるコンポーネント、検索バーと結果ページを使用して多数のJSONデータファイルをフィルタリングできる検索ページを作成しようとしていることです(これを行うより良い方法がある場合は、私はすべての耳です)。私はデータを収集する検索バーを取得し、データをルータ経由で結果ページに渡すようにしています。実際にはクエリとフィルタリングが行われますが、結果ページを取得してデータを読み取ることはできませんクエリ文字列から。関連するファイルは次のとおりです。
検索bar.component.ts
import { Component } from '@angular/core';
import { Router } from '@angular/router';
@Component({
selector: 'search-bar',
templateUrl: './search-bar.component.html',
styleUrls: ['./search-bar.component.css']
})
export class SearchbarComponent {
langSelect: string = 'english'; // Default search language
searchTerm: string;
constructor(private router: Router) {}
searchForTerm() {
let data: string = this.searchTerm + '_' + this.langSelect
this.router.navigate(['/results', {searchData: data}]);
}
}
検索results.component.ts
import { Component, OnInit } from '@angular/core';
import { ActivatedRoute, Params } from '@angular/router';
import { WordEntry } from '../../shared/models/word-entry';
import { DataRetrievalService } from '../../shared/services/data-retrieval.service';
@Component({
templateUrl: './search-results.component.html',
styleUrls: ['./search-results.component.css']
})
export class SearchResultsComponent implements OnInit {
searchData: string; // Two parameters separated by '_'. search term is on the left and the language on the right
constructor(private dataSvc: DataRetrievalService, private route: ActivatedRoute) {}
ngOnInit() {
console.log('starting!');
this.route.params.subscribe((params: Params) => {
this.searchData = params['searchData'];
console.log(this.searchData);
});
}
}
-----------編集 - -----------
search.module.ts
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { RouterModule, Routes } from '@angular/router';
import { FormsModule } from '@angular/forms';
import { SearchbarComponent } from './searchBar/search-bar.component';
import { SearchComponent } from './searchComponent/search.component';
import { SearchResultsComponent } from './searchResults/search-results.component';
import { DataRetrievalService } from '../shared/services/data-retrieval.service';
const SearchRoutes: Routes = [
{
path: 'search',
component: SearchComponent,
children: [
{ path: 'results', component: SearchResultsComponent }
]
}
];
@NgModule({
imports: [
CommonModule,
FormsModule,
RouterModule.forChild(SearchRoutes)
],
exports: [
RouterModule,
SearchbarComponent
],
declarations: [
SearchComponent,
SearchbarComponent,
SearchResultsComponent
],
providers: [
DataRetrievalService
]
})
export class SearchModule {}
これらの2つのファイルは、検索モジュール内のそれぞれのフォルダ内の兄弟コンポーネントです。
私の問題は、コンソールに何も印刷されていないため、ngOnInit()が呼び出されていないように見えて、searchDataクラスの変数に何も入っていないということです。
私が間違っていることに関するアイデアはありますか?ご協力いただきありがとうございます!
あなたはフィドルを提供できますか? 'search-results.component.html'は何らかの形であなたのテンプレートで呼び出されていますか? –
'search-results'のセレクタが意図的に欠けていましたか?このコンポーネントはどこに初期化されていますか?質問に含まれているモジュールを追加すると、役立つ場合があります。エラーを見つけるにはさらに詳しい情報が必要です。 –
SearchResultsComponentにはセレクタがないため、ロードする原因は何もありません。 –