angular - 从模式弹出窗口执行 router.navigate 时,this.router.navigate 不是函数错误
问题描述
我有一个组件。该组件有一个按钮,当我单击该按钮时,我正在显示一个模式弹出框。从模态弹出框我做一个表单提交,我想从模态弹出窗口做一个 router.navigate ,它显示一个错误:
this.router.navigate 不是函数错误
以下是我的模态弹出框中的代码。错误发生在这一行
this.router.navigate(['/campaigns','${cloneFlightRequest.campaignId}'])
。我不知道为什么会这样。
import { CommonModule } from '@angular/common';
import { BrowserModule } from '@angular/platform-browser';
import { Component, OnInit, ViewEncapsulation, QueryList } from '@angular/core';
import { BsModalRef } from 'ngx-bootstrap';
import { Flight, CampaignUnpaginated } from '../../models';
import { FormGroup, FormBuilder, Validators } from '@angular/forms';
import { propComparator } from '../../../shared/utils';
import { CloneFlightRequest } from './../../../shared/models/requests/clone-flight-request.model'
import { FlightsService } from '../../services/flights.service';
import { DataListComponent } from '../data-list/data-list.component';
import { PaginatedDataSource } from '../../data-sources';
import { Router } from '@angular/router';
export interface CloneFlightFormValue {
flightName: string;
campaign: CampaignUnpaginated;
}
@Component({
selector: 'pc-clone-flight-modal',
templateUrl: './clone-flight-modal.component.html',
styleUrls: ['./clone-flight-modal.component.scss']
}
)
export class CloneFlightModalComponent implements OnInit {
flight : Flight;
campaigns: CampaignUnpaginated[];
dataListsQuery: QueryList<DataListComponent<Flight>> | null;
formGroup: FormGroup;
compareResources = propComparator('id');
showCloneForm: boolean = true;
cloneSuccess:boolean = false;
cloneFailure:boolean = false;
isSubmitting:boolean = false;
router: Router;
constructor(public modalRef: BsModalRef, private fb: FormBuilder,
private flightService : FlightsService){
}
ngOnInit() {
this.formGroup = this.fb.group({
flightName: [{ value: ''},[Validators.required]],
campaign : [ '' , Validators.required]
});
this.showCloneForm = true;
}
handleSubmit(value: CloneFlightFormValue){
const cloneFlightRequest : CloneFlightRequest = {
flightName : value.flightName ,
campaignId : value.campaign.id,
flightId: this.flight.id
};
this.isSubmitting = true;
this.flightService.submitCloneFlight(cloneFlightRequest)
.subscribe( data => {
this.showCloneForm = false;
this.cloneSuccess = true;
this.cloneFailure = false;
if( this.dataListsQuery ){
this.dataListsQuery.first.refresh();
}
if(this.router){
console.log('`/campaigns/${cloneFlightRequest.campaignId}`');
this.router.navigate(['/campaigns','${cloneFlightRequest.campaignId}']);
}
},
err => {
this.showCloneForm = false;
this.cloneSuccess = false;
this.cloneFailure = true;
},
()=> {
this.showCloneForm = false;
}
);
}
hideModal(){
this.modalRef.hide();
}
}
这是调用服务然后打开模式对话框的类
export class CampaignDetailsComponent implements OnInit {
@ViewChild(DataListComponent) dataList: DataListComponent<Flight>;
cloneFlight(flight: Flight) {
this.isLoadingFlights = true;
combineLatest(
this.flightsService.getCampaignsToClonebyAccountId(this.campaign.account.id)
).subscribe( ([campaigns]) => {
this.isLoadingFlights = false;
this.cloneFlightService.openModal(flight, campaigns , null , this.router );
});
}
}
克隆飞行服务
@Injectable()
export class CloneFlightService
{
bsModalRef: BsModalRef;
constructor(private modalService: BsModalService, private flightService: FlightsService){}
openModal(flight: Flight, campaigns: CampaignUnpaginated[],
dataListsQuery: QueryList<DataListComponent<Flight>> | null, router: Router) {
const initialState = {
flight: flight,
campaigns : campaigns,
dataListsQuery: dataListsQuery,
router: Router
};
this.bsModalRef = this.modalService.show(CloneFlightModalComponent,{ initialState});
}
submitCloneFlightRequest(cloneFlightRequest: CloneFlightRequest) {
return this.flightService.submitCloneFlight(cloneFlightRequest);
}
}
解决方案
推荐阅读
- javascript - 如何在 CodeSandBox 中运行脚本?
- python - 为基本的 Flask 应用程序添加背景图像?
- google-data-studio - 谷歌数据洞察过滤器控制大小写敏感
- python - 当我用 fig.canvas.draw 做 imshow 时,为什么边距这么大?
- monaco-editor - 摩纳哥编辑器:更改默认字形边距悬停工具提示样式
- php - php woocomerce 购物车除法和乘法
- arrays - 用两个条件计算 IFS
- servicestack - 如何测试具有重定向的端点?
- f# - F# 制作不必要的 DateTimeOffset 副本
- kubernetes - 使用 iptables 阻止来自集群外部的所有 Kubernetes 节点端口通信