Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 在MVC+中使用MVC路由时出现异常;角度2应用程序_Angular_Asp.net Mvc 5 - Fatal编程技术网

Angular 在MVC+中使用MVC路由时出现异常;角度2应用程序

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

我创建了一个MVC5 Angular 2应用程序,当我运行它时,它运行良好。然而,在加载之后,如果我导航到另一个页面(比如About),我会收到一个异常消息:选择器“我的应用程序”与任何元素都不匹配。以下是所有相关代码:

文件夹结构:

| - 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>&copy; @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>