angular - 无法读取 Angular 中未定义的属性 'navigate'

标签 angular angular-ui-router single-page-application angular-routing

所有关于 Angular 错误的帮助文章都说要确保有人像这样注入(inject)了“路由器”:
构造函数(路由器:路由器....
我所做的。
我不确定还能做什么。在开始对路由进行故障排除之前,我必须解决此问题。
我的目标:
允许用户导航到子路由。
允许用户在点击时关闭当前路线。
所以当前地址将是:
https://localhost:4200/layout/usermanagement/(newuser:newuser/(newuserinput:newuserinput))
单击后,我将被路由到:
https://localhost:4200/layout/usermanagement/(newuser:newuser/(newuserorginfo:newuserorginfo))
此外,在单击另一个按钮后,我将被路由到:
https://localhost:4200/layout/usermanagement/(newuser:newuser))
这是我的组件、模块和模板。
组件 new-user-input.component.ts

import { Component, OnInit } from '@angular/core';
import { slideToRight } from '../../../../router.animations';
import { Router, ActivatedRoute, UrlSegment } from '@angular/router';

@Component({
  selector: 'app-new-user-input',
  templateUrl: './new-user-input.component.html',
  styleUrls: ['./new-user-input.component.css'],
  animations: [slideToRight()]
})
export class NewUserInputComponent implements OnInit {
  router: Router;

  constructor(router: Router, r: ActivatedRoute) {
    r.url.subscribe((s: UrlSegment[]) => {
      console.log("url", s); //https://vsavkin.com/angular-router-understanding-router-state-7b5b95a12eab
    });
  }

  ngOnInit() {
  }

  displaySibling() {
    console.log(this.router);
    this.router.navigate(['../', { outlets: { newuserorginfo: ['newuserorginfo'] } }])
  }

  closeBlade() {
    this.router.navigate([{ outlets: { newuserinput: null } }]);
  }

}
MODULE user-management.module.ts
import { HttpModule, JsonpModule } from '@angular/http';
import { BrowserModule } from '@angular/platform-browser';
// import 'rxjs/add/operator/map';
import { NgModule, Type, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { CommonModule } from '@angular/common';

import { GridAllModule } from '@syncfusion/ej2-ng-grids';
import { HttpClientModule } from '@angular/common/http';
import {
  GridModule, ToolbarService, EditService, SortService, GroupService, FilterService, PageService,
  ContextMenuItem, PdfExportService, ExcelExportService, ContextMenuService, ResizeService,
  DataSourceChangedEventArgs, DataStateChangeEventArgs
} from '@syncfusion/ej2-ng-grids';


import { UserManagementComponent } from './user-management.component';
import { PageHeaderModule } from './../../shared/page-header/page-header.module';
import { NgbModule } from '@ng-bootstrap/ng-bootstrap';


// import { NewUserComponent } from './new-user/new-user.component';
// import { PendingUserComponent } from './pending-user/pending-user.component';
// import { ProcessUserComponent } from './process-user/process-user.component';
// import { NewUserInputComponent } from './new-user/new-user-input/new-user-input.component';

import { RouterModule } from '@angular/router';
import { NewUserOrgInfoComponent } from './new-user/new-user-org-info/new-user-org-info.component';
import { NewUserSupervisorInfoComponent } from './new-user/new-user-supervisor-info/new-user-supervisor-info.component';
import { NewUserSecurityInfoComponent } from './new-user/new-user-security-info/new-user-security-info.component'; //??????????

@NgModule({
  imports: [
    CommonModule,
    PageHeaderModule,
    GridModule,
    RouterModule,
    NgbModule
  ],
  declarations: [UserManagementComponent, NewUserOrgInfoComponent, NewUserSupervisorInfoComponent, NewUserSecurityInfoComponent],
  providers: [EditService, ToolbarService, SortService, GroupService, FilterService, PageService,
    ContextMenuService, PageService, ResizeService, PdfExportService, ExcelExportService]
})
export class UserManagementModule {
}
模板 new-user-input.component.html
<div class="blade" [@routerTransition]>
  <div class="blade-header">
    <h3>User Information</h3>
    <div class="window-functions">
      <i class="fa fa-window-minimize"></i>
      <i class="fa fa-window-restore"></i>
      <i class="fa fa-window-maximize"></i>
      <!-- <a routerLink='/layout/usermanagement/(newuser:newuser)' routerLinkActive='router-link-active'> -->
      <i (click)='closeBlade()' class="fa fa-window-close"></i>
      <!-- </a> -->
    </div>
  </div>
  <form action="submit">
    <!-- <label for="firstname">First Name:</label> -->
    First name:
    <br>
    <input type="text" name="firstname" value="Richard">
    <br> Last name:
    <br>
    <input type="text" name="lastname" value="Dawkins">
    <br> Cell phone:
    <br>
    <input type="tel" name="cellphone" value="(585) 271-8888">
    <br> Office phone:
    <br>
    <input type="tel" name="officephone" value="(585) 271-8887">
    <br> Fax:
    <br>
    <input type="tel" name="fax" value="(585) 271-8886">
    <br> City:
    <br>
    <input type="text" name="city" value="City">
    <br> State:
    <br>
    <input type="text" name="state" value="New York">
    <br> Requester title:
    <br>
    <br>
    <!-- <input type="submit" value="Next" disabled="true"> -->
    <input class="next-button" type="submit" value="Next" (click)="displaySibling()">
    <!-- <input type="submit" value="Next" [routerLink]="[{ outlets: { newuserorginfo: ['newuserorginfo '] } } ]" routerLinkActive='active '> -->
  </form>
</div>
<router-outlet></router-outlet>
<router-outlet name="newuserorginfo"></router-outlet>

最佳答案

发生错误的原因是 router不是组件类的成员。在构造函数中注入(inject)服务时指定访问级别( privateprotectedpublic )将使 router类的属性并解决问题:

constructor(private router: Router, ...)

关于angular - 无法读取 Angular 中未定义的属性 'navigate',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50489080/

相关文章:

javascript - Angular 2 : uiRouter get current state params in root component

angularjs - 使用 Amazon S3 时如何将爬虫请求重定向到预渲染页面?

angular - 几个未满足的对等依赖错误,包括 @angular/common@2.4.9

javascript - Angular 2 : importing router bundle

javascript - 在 Angular 应用程序之外使用 angular2 服务

angularjs - `ui-router` $stateParams 与 $state.params

angular - 使用 rxjs 处理刷新 token

javascript - Angular 从 ng-Route 到 Ui.Router

javascript - 没有 hashbang 的动态 Web 应用程序 #!

javascript - 如果有新版本,我如何强制 SPA 客户端硬刷新?