Angular 在MVC+中使用MVC路由时出现异常;角度2应用程序
我创建了一个MVC5 Angular 2应用程序,当我运行它时,它运行良好。然而,在加载之后,如果我导航到另一个页面(比如About),我会收到一个异常消息:选择器“我的应用程序”与任何元素都不匹配。以下是所有相关代码: 文件夹结构:Angular 在MVC+中使用MVC路由时出现异常;角度2应用程序,angular,asp.net-mvc-5,Angular,Asp.net Mvc 5,我创建了一个MVC5 Angular 2应用程序,当我运行它时,它运行良好。然而,在加载之后,如果我导航到另一个页面(比如About),我会收到一个异常消息:选择器“我的应用程序”与任何元素都不匹配。以下是所有相关代码: 文件夹结构: | - App | | - app.ts | | - boot.ts | | - main.ts | | - Views | | - Shared | | - _Layout.cshtml | | - systemjs.config.j
| - App
| | - app.ts
| | - boot.ts
| | - main.ts
|
| - Views
| | - Shared
| | - _Layout.cshtml
|
| - systemjs.config.js
_Layout.cshtml
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>@ViewBag.Title - My ASP.NET Application</title>
<!-- Polyfill(s) for older browsers -->
<script src="~/node_modules/core-js/client/shim.min.js"></script>
@Styles.Render("~/Content/css")
@Scripts.Render("~/bundles/modernizr")
</head>
<body>
<div class="navbar navbar-inverse navbar-fixed-top">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
@Html.ActionLink("Application name", "Index", "Home", new { area = "" }, new { @class = "navbar-brand" })
</div>
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li>@Html.ActionLink("Home", "Index", "Home")</li>
<li>@Html.ActionLink("About", "About", "Home")</li>
<li>@Html.ActionLink("Contact", "Contact", "Home")</li>
</ul>
</div>
</div>
</div>
<div class="container body-content">
@RenderBody()
<hr />
<footer>
<p>© @DateTime.Now.Year - My ASP.NET Application</p>
</footer>
</div>
<script src="~/node_modules/zone.js/dist/zone.js"></script>
<script src="~/node_modules/systemjs/dist/system.src.js"></script>
<script src="~/systemjs.config.js"></script>
<script>
System.import('app').catch(function (err) { console.error(err); });
</script>
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/bootstrap")
@RenderSection("scripts", required: false)
</body>
</html>
梅因酒店
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { AppModule } from './boot';
const platform = platformBrowserDynamic();
platform.bootstrapModule(AppModule);
boot.ts
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { AppComponent } from './app';
@NgModule({
imports: [BrowserModule],
declarations: [AppComponent],
bootstrap: [AppComponent]
})
export class AppModule { }
app.ts
import { Component } from '@angular/core';
@Component({
selector: 'my-app',
template: `
<h2>My favorite skill is: {{myskills}}</h2>
<p>Skill:</p>
<ul>
<li *ngFor="let skl of skills">
{{ skl }}
</li>
</ul>
`
})
export class AppComponent {
title = 'ASP.NET MVC 5 with Angular 2';
skills = ['MVC 5', 'Angular 2', 'TypeScript', 'Visual Studio 2015'];
myskills = this.skills[1];
}
从'@angular/core'导入{Component};
@组成部分({
选择器:“我的应用程序”,
模板:`
我最喜欢的技能是:{{myskills}}
技能:
-
{{skl}}
`
})
导出类AppComponent{
title='ASP.NET MVC 5和Angular 2';
技能=['MVC5'、'Angular 2'、'TypeScript'、'Visual Studio 2015'];
myskills=this.skills[1];
}
如果我遗漏了任何信息,请告诉我,如果需要更多信息
更新
以下是错误的屏幕截图:
更新2
以下是index.cshtml代码:
@{
ViewBag.Title = "Home Page";
}
<my-app>Loading...</my-app>
@{
ViewBag.Title=“主页”;
}
加载。。。
_Layout.cshtml是共享视图,index.cshtml是angular应用程序所在的位置。任何其他MVC视图都会在_Layout.cshtml中包含所有代码
谢谢 谢谢@Yeysides!你的解释帮我弄明白了。我所要做的就是将引导脚本从_Layout.cshtml移到Index.cshtml。因此Index.cshtml如下所示:
@{
ViewBag.Title = "Home Page";
}
@section Scripts{
<script>
System.import('app').catch(function (err) { console.error(err); });
</script>
}
<my-app>Loading...</my-app>
@{
ViewBag.Title=“主页”;
}
@节脚本{
System.import('app').catch(函数(err){console.error(err);});
}
加载。。。
这解决了问题。您正在通过
angular
或mvc
?mvc进行布线。我没有添加任何角度路由逻辑。这是一个非常基本的应用程序。您面临的错误是什么?因为您正在使用AppComponent引导angular应用程序,它正在寻找应用程序组件选择器作为起点,而该选择器似乎未在布局视图中使用。通常情况下,您可以在angular中的index.html中执行此操作。因此,基本上你需要把它作为启动应用程序的起始位置,但我不确定你会如何使用asp.net实现这一点。在angular cli中,您可以配置索引文件,但需要知道如何告诉angular查看布局文件以查找该节点。
@{
ViewBag.Title = "Home Page";
}
@section Scripts{
<script>
System.import('app').catch(function (err) { console.error(err); });
</script>
}
<my-app>Loading...</my-app>