我創建了一個查詢參數工作的拉請求。我會盡力解釋我所做的一切。
以前的答案不起作用的原因是因爲你根本沒有使用路由器。您創建了一個沒有路由的大型應用組件。爲了解決這個問題,我們需要開始使用路由模塊,我還建議您閱讀這兩個教程:Routing和Routing & Navigation。
首先,我們需要改變你的index.html
,添加到您的<head>
:
<base href="/">
見here爲什麼要補充一點,這一點很重要。
然後,因爲您正在使用您的AppComponent
來顯示創建需要組件的所有內容,我們將其稱爲RootComponent
。在你的index.html
上用<root>
替代<my-app>
;它看起來就像這樣:
<root>Loading...</root>
現在你app
文件夾內,我們需要創建兩個文件,第一個將root.component.ts
這將是這樣的:
import { Component } from '@angular/core';
@Component({
selector: 'root',
template: `<router-outlet></router-outlet>`,
})
export class RootComponent {
constructor() { }
}
看,我們有<router-outlet></router-outlet>
作爲模板,Angular會根據路線注入我們的組件。
我們仍然需要再創建一個文件,這將是main.route.ts
,這是它的樣子:
import { Routes, RouterModule } from '@angular/router';
import { AppComponent } from './app.component';
export const mainRoutes: Routes = [
{ path: '', component: AppComponent }
];
export const mainRoutingProviders: any[] = [];
export const routing = RouterModule.forRoot(mainRoutes);
在這個文件中,我們說,我們的基本路線,我們想使我們的AppComponent
我們已經創建了新的文件,現在我們需要告訴我們的APP模塊他們,在你app.module.ts
所以我們導入了新的文件,並宣佈新的組件。我們還需要改變我們的自舉分量:這一切
import {NgModule} from '@angular/core';
import {BrowserModule} from '@angular/platform-browser';
import {FormsModule, ReactiveFormsModule} from "@angular/forms";
import {AppComponent} from './app.component';
import {RootComponent} from './root.component'; // we import our new RootComponent
import {ChartModule} from 'primeng/primeng';
import {TooltipModule} from 'primeng/primeng';
import { routing, mainRoutingProviders } from './main.routes'; // We also import our Routes
@NgModule({
imports: [
BrowserModule,
ChartModule,
FormsModule,
mainRoutingProviders, // we also need to import our route provider into the module
ReactiveFormsModule,
routing, // and also import our routes declarations
TooltipModule
],
declarations: [AppComponent, RootComponent], // we declare our new RootCpmponent
bootstrap: [RootComponent] // Notice that we are now using our RootComponent to bootstrap our app
})
export class AppModule {
}
已經到位,我們現在終於可以開始參數傳遞到我們的應用程序,您AppComponent
進口Router
,ActivatedRoute
和Params
從@angular/router
所以你AppComponent
會是這個樣子:
import { Component, OnDestroy, OnInit } from '@angular/core';
import { Router, ActivatedRoute, Params } from '@angular/router';
import { Subscription } from 'rxjs/Subscription';
export class AppComponent implements OnInit, OnDestroy {
private var1: string;
private var2: string;
private sub: Subscription;
constructor(
private route: ActivatedRoute,
private router: Router
) {}
ngOnInit() {
// assign the subscription to a variable so we can unsubscribe to prevent memory leaks
this.sub = this.route.queryParams.subscribe((params: Params) => {
this.var1 = params['var1'];
this.var2 = params['var2'];
console.log(this.var1, this.var2);
});
}
ngOnDestroy() {
this.sub.unsubscribe();
}
...
}
你可以看到拉入請求here
法比奧,這正是我試圖弄清楚整個時間。非常感謝。對於Angular 2,我仍然是一個新手,所以非常感謝您花費寶貴的時間來解釋一切。它不僅現在可以工作,而且按照您所概述的邏輯進行了很好的學習練習。信譽得到50分。 – jjj
@jjj你很受歡迎。我很高興它有幫助。 –
還有一個問題....在app.component.ts,是否需要保持:'私人路由器:路由器',在65線?看起來這是一個未使用的參數不是? – jjj