.NET MVC 5 中的 Angular 6 应用程序,角度路由不起作用

2024-03-08

我已将 Angular 6 应用程序嵌入到现有的 .NET MVC 5 应用程序中。我在 MVC 应用程序 (RouteConfig.cs) 中添加了一条指向 Home/Index 的后备路由,因此“未知”路由将传递到 Angular 应用程序的路由器模块 (app.routes.ts)。 Angular 应用程序的路由似乎没有触发,与路径关联的组件没有加载。

IDE是Visual Studio 2017 Enterprise 15.6.7,MVC应用程序是标准.NET Web应用程序(不是.NET Core),MVC 5.2.3.0; Node.js 8.11.3、npm 6.3.0、Typescript 2.9.2、Angular CLI 6.0.8、Angular 6.0.3;引导程序 3.3.7、jquery 3.3.1;操作系统:Win 10 x64。

MVC 应用程序的 RouteConfig.cs 如下;包罗万象的路线位于底部。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;

namespace Ang2Mvc5_0
{
    public class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                name: "mvc",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );

            // This is a catch-all for when no other routes match the request; let the Angular 2 router take care of it...
            routes.MapRoute(
                name: "default",
                url: "{*url}",
                defaults: new { controller = "Home", action = "Index" } // The view that bootstraps Angular 2 app
            );
        }
    }
}

当我创建 Angular 应用程序(使用 CLI)时,Typescript 的 package.json 条目默认为 2.7.2; package.json 如下,ngf-bootstrap 条目特定于 PluralSight 教程。

我错过了什么吗?

{
    "name": "temp-app",
    "version": "0.0.0",
    "scripts": {
        "ng": "ng",
        "start": "ng serve",
        "build": "ng build",
        "test": "ng test",
        "lint": "ng lint",
        "e2e": "ng e2e"
    },
    "private": true,
    "dependencies": {
        "@angular/animations": "^6.0.3",
        "@angular/common": "^6.0.3",
        "@angular/compiler": "^6.0.3",
        "@angular/core": "^6.0.3",
        "@angular/forms": "^6.0.3",
        "@angular/http": "^6.0.3",
        "@angular/platform-browser": "^6.0.3",
        "@angular/platform-browser-dynamic": "^6.0.3",
        "@angular/router": "^6.0.3",
        "core-js": "^2.5.4",
        "ngf-bootstrap": "0.0.5",
        "rxjs": "^6.0.0",
        "toastr": "^2.1.4",
        "zone.js": "^0.8.26"
    },
    "devDependencies": {
        "@angular-devkit/build-angular": "~0.6.8",
        "@angular/cli": "~6.0.8",
        "@angular/compiler-cli": "^6.0.3",
        "@angular/language-service": "^6.0.3",
        "@types/jasmine": "~2.8.6",
        "@types/jasminewd2": "~2.0.3",
        "@types/node": "~8.9.4",
        "codelyzer": "~4.2.1",
        "jasmine-core": "~2.99.1",
        "jasmine-spec-reporter": "~4.2.1",
        "karma": "~1.7.1",
        "karma-chrome-launcher": "~2.2.0",
        "karma-coverage-istanbul-reporter": "~2.0.0",
        "karma-jasmine": "~1.1.1",
        "karma-jasmine-html-reporter": "^0.2.2",
        "protractor": "^5.4.0",
        "ts-node": "~5.0.1",
        "tslint": "~5.9.1",
        "typescript": "~2.7.2"
    }
}

app.routes.ts 如下;这真的很简单,到目前为止,我在应用程序开发方面还没有取得很大进展。

import { NgModule } from '@angular/core'
import { Routes, RouterModule } from '@angular/router'

import { EventsListComponent } from './events/events-list.component'
import { EventDetailsComponent } from './events/event-details/event-details.component'

const routes: Routes = [
    {
        path: 'events',
        component: EventsListComponent
    },
    {
        path: 'events/:id',
        component: EventDetailsComponent
    },
    {
        path: '',
        redirectTo: '/events'
    }
];

@NgModule({
    imports: [RouterModule.forRoot(routes, { enableTracing: true })],
    exports: [RouterModule]
})

export class AppRoutingModule {
}

EventsAppModule 如下;注意@第16行,我已经导入了AppRoutingModule (app.routes.ts),我可以注释此行以禁用路由。

import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';

import { EventsAppComponent } from './events-app.component';
import { EventsListComponent } from './events/events-list.component';
import { EventThumbnailComponent } from './events/event-thumbnail.component';
import { EventDetailsComponent } from './events/event-details/event-details.component';
import { NavBarComponent } from './nav/navbar.component';
import { EventService } from './events/shared/event.service';
import { ToastrService } from './common/toastr.service';
import { AppRoutingModule } from './app.routes';

@NgModule({
    imports: [
        BrowserModule
        , AppRoutingModule
    ],
    declarations: [
        EventsAppComponent,
        EventsListComponent,
        EventThumbnailComponent,
        EventDetailsComponent,
        NavBarComponent
    ],
    providers: [
        EventService,
        ToastrService
    ],
    bootstrap: [EventsAppComponent]
})

export class EventsAppModule { }

如前所述,当尝试使用路由时,使用<router-outlet></router-outlet>在应用程序的主要组件/页面中添加标签时,EventsListComponent 无法加载(我得到一个空白页面)。如果我从应用程序的模块中注释 AppRoutingModule 并切换到<events-list></events-list>在应用程序的主组件中,EventsListComponent 可以正常加载(它显示事件列表,每个事件都封装在 EventThumbnailComponent 中)。

另外,它不加载http://localhost:39420/事件 http://localhost:39420/events当我跑步时;它默认为 root,例如 localhost:39420/ ...如果我在 url 中输入“/events”,我不会收到错误,只是一个空白页面。如果我尝试再次使用 localhost:39420/events/1 ...获取 EventDetailsComponent,它只会呈现一个空白页面。


redirectTo期望路由器应导航到的确切路径。所以它期望一个/在您可能定义的路由路径之前。

Replace redirectTo: 'events' with redirectTo: '/events'在你的路由配置中,它应该加载EventsListComponent组件正确。

还添加一个pathMatch: 'full'到这条路线:

    {
        path: '',
        redirectTo: '/events',
        pathMatch: 'full'
    }

这是一个StackBlitz 项目 https://stackblitz.com/edit/angular-sample-routing-eg来帮助你。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

.NET MVC 5 中的 Angular 6 应用程序,角度路由不起作用 的相关文章

随机推荐

  • Angular 5 HttpClient 与之前的 Http 相比有哪些优势?

    我阅读了官方升级指南 上面写着 因为 HttpClient 得到广泛采用 我们决定 但是这个 HttpClient 带来的真正好处是什么 我正在考虑尝试一下 但中途感到困惑 因为我不知道升级后这些需要发生什么 从 angular http
  • 使用 nginx 的子目录中的 CakePHP(重写规则?)

    不久前我设法让它工作 但是当我回到我开始的 cakephp 项目时 似乎我最近对 nginx 所做的任何更改 或者可能是最近的更新 都打破了我的重写规则 目前我有 worker processes 1 events worker conne
  • Angular cli 项目中的绝对路径

    如何在 Angular cli 生成的项目中使用绝对路径 所以我有这条路 src gt app gt shared我想写import from shared ffdsdf my module ts 代替 shared ffdsdf my m
  • 将 dynamodb 表复制到 hive 的 pyspark 代码问题:不允许操作

    我正在尝试使用 pyspark 代码从 aws emr 上的 Dynamodb 创建外部配置单元表 当我在 hive 提示符下执行查询时 该查询工作正常 但当我将其作为 pyspark 作业执行时 该查询会失败 代码如下 from pysp
  • 本地开发主机的通配符

    我最近在多个项目之间切换 所有这些都在相同的IP上本地运行 但具有不同的域 实际上它总是 local like foo local bar local等等 我可以继续将它们添加到我的 etc hosts文件 但这不是很干净的方式 这就是为什
  • 我无法在 Android AVD Manager 中创建模拟器

    我正在尝试创建一个 Android 模拟器 当我打开 AVD 管理器并尝试创建一个模拟器时 它一直显示 未选择目标 即使我选择了目标 http bit ly 15vr9fk http bit ly 15vr9fk 面临同样的问题 我检查了A
  • 未收到 Microsoft Graph 更改通知

    我想订阅用户删除 以便每当在 Azure AD 中删除用户时 我们的应用程序都可以做出相应的反应 这是我的订阅请求 const now new Date const threeDaysLater new Date now getTime 3
  • unix fork exec 序列真的像听起来那么昂贵吗?

    我正在读关于fork and exec对于考试 我的书说 每当需要在 UNIX 系统中运行一个新的 不同的 进程时 您都会分叉当前进程 然后是execve 然而 它也说 每当fork被调用时 父进程的整个内存映像被复制到新进程 那么我的问题
  • 是否可以通过在基类中添加新的虚函数来破坏代码?

    是否可以通过简单地向基类添加新的虚函数来改变程序的观察到的行为 我的意思是不必对代码进行其他更改 以下程序打印OK 取消注释虚函数B它将开始打印CRASH include
  • 如何使用 JavaScript 创建电子邮件按钮

    我找不到真正符合我的问题的帖子 所以我们开始 我想在我的网站上实现 通过邮件共享 按钮 因此当您单击该按钮时 假设 Outlook 或 Thunderbird 打开 并为您提供在新邮件中共享网站链接的选项 我不太确定 但我认为我无法仅使用
  • 将带孔的多边形转换为多个简单的无孔多边形

    我正在处理IfcFace http www buildingsmart tech org ifc IFC4 Add2 html schema ifctopologyresource lexical ifcface htm 我得到了一个带孔的
  • Xamarin - 异步数据绑定

    我有以下代码 包含大量图像的页面 通过数据绑定动态加载 base OnAppearing if loaded loaded true BindingContext new GalleryViewModel pCode gCode gUrl
  • __func__ 和 __PRETTY_FUNCTION__ 并不总是扩展

    我有一个日志库 它使用宏来跟踪消息 该宏使用预定义的宏 例如 func and PRETTY FUNCTION 指示消息被记录在哪个函数 方法中 我的日志库的宏定义在我的日志库的主头中 位于任何函数之外 由于某种原因 预处理的代码包含 fu
  • Dynamics CRM 2011 中如何拥有多个 javascript 库

    是的 我正在创建一个方法 将帐户添加到 Dynamics CRM 并使用 Ajax POST 到内置 Web 服务 代码如下 var context GetGlobalContext var serverUrl context getSer
  • 将值类型转换为泛型

    我有一个泛型类 我需要将其限制为仅值类型 int float 等 我有一个基于类型测试调用 Parse 方法的方法 例如 class MyClass
  • 如何连接 MySQL 中的结果集?

    我想用逗号作为分隔符字符串来连接 MySQL 中集合中返回的结果 例如 返回的集合包含 COLUMN X john jerry maria joseph gugla 我希望收到的结果为 COLUMN X concat john jerry
  • 静态构造函数和异常

    如果静态构造函数抛出异常且未处理 会发生什么情况 它会一直保留到应用程序域处于活动状态吗 静态构造函数中未处理的异常将被包装在TypeInitializationException 如果您使用的是 NET 2 或更高版本 则未处理的异常将终
  • 错误:ENOENT:没有这样的文件或目录,scandir './commands/'

    当我想使用不和谐时 我收到此错误输出 Error ENOENT no such file or directory scandir commands 90m at Object readdirSync fs js 1021 3 39m at
  • 如果存在重复的模块名称,Python 指定从哪个模块导入?

    相关 从相对路径导入模块 https stackoverflow com questions 279237 import a module from a relative path dirA A py B py dirB B py A py
  • .NET MVC 5 中的 Angular 6 应用程序,角度路由不起作用

    我已将 Angular 6 应用程序嵌入到现有的 NET MVC 5 应用程序中 我在 MVC 应用程序 RouteConfig cs 中添加了一条指向 Home Index 的后备路由 因此 未知 路由将传递到 Angular 应用程序的