Angular2 quickstart main.js被搜索到错误的路径

时间:2017-01-04 17:16:01

标签: asp.net-mvc angular

main.js未从http://localhost:6541/app/main.js加载,搜索到http://localhost:6541/Home/app/main.js,我收到404。

所以我有systemjs.config.js:

(function (global) {
   var map = {
       'app': 'app',
       '@angular': 'lib/@angular',
       'rxjs': 'lib/rxjs'
    };
    var packages = {
        'app': { main: './main.js',  defaultExtension: 'js' },
        'rxjs': { defaultExtension: 'js'}
    };
    var ngPackegeNames = [
        'common',
        'compiler',
        'core',
        'http',
        'platform-browser',
        'platform-browser-dynamic',
        'router',
        'router-deprecated',
        'upgrade'
    ];
    ngPackegeNames.forEach(function (pkgName) {
        packages['@angular/' + pkgName] = {
            main: pkgName + '.umd.js',
            defaultExtension: 'js'
        };
    });
    var config = {
        map: map,
        packages: packages
    };
    System.config(config);
})(this);

tsconfig.json:

{
"compilerOptions": {
"target": "es6",
"module": "commonjs",
"moduleResolution": "node",
"sourceMap": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"lib": [ "es6", "dom" ],
"noImplicitAny": true,
"suppressImplicitAnyIndexErrors": true,
"rootDir": "app",
"outDir": "wwwroot/app"
},
"compileOnSave": true,
"exclude": ["node_modules","wwwroot/lib"]
}
我在布局中的

<script src="~/lib/core-js/client/shim.min.js"></script>
<script src="~/lib/zone.js/dist/zone.js"></script>
<script src="~/lib/reflect-metadata/Reflect.js"></script>
<script src="~/lib/systemjs/dist/system.src.js"></script>
<script src="~/js/systemjs.config.js"></script>
<script>
        System.import('app').catch(function (err) { console.error(err); });
</script>

在renderBody html文件中:

<my-app> Loading AppComponent content here ...</my-app>
来自Angular 2 Quickstart 404 GET /app/main.js的任何内容均无效。

1 个答案:

答案 0 :(得分:1)

我相信您遇到的问题是MVC框架路由的结果。由于您使用的.cshtml文件位于Home Controller中,因此路由将从主控制器(http://localhost:6541/Home)的基础开始。

您需要使用systemjs.config.js字符更新wwwroot备份到..文件夹的基础,如下所示:

(function (global) {
    var map = {
        'app': '../app',
        '@angular': '../lib/@angular',
        'rxjs': '../lib/rxjs'
    };
    var packages = {
        'app': { main: './main.js',  defaultExtension: 'js' },
        'rxjs': { defaultExtension: 'js'}
    };
    var ngPackegeNames = [
        'common',
        'compiler',
        'core',
        'http',
        'platform-browser',
        'platform-browser-dynamic',
        'router',
        'router-deprecated',
        'upgrade'
    ];
    ngPackegeNames.forEach(function (pkgName) {
        packages['@angular/' + pkgName] = {
            main: pkgName + '.umd.js',
            defaultExtension: 'js'
        };
    });
    var config = {
        map: map,
        packages: packages
    };
    System.config(config);
})(this);

作为替代方案,由于angular是一个SPA而你不会做很多MVC路由,因此将TypeScript编译到wwwroot文件夹下的Home文件夹可能是有意义的。这样,您就不必对systemjs.config.js文件进行任何更改,并且对应用的引用也能正常运行。为此,请修改tsconfig.json,如下所示:

"outDir": "wwwroot/Home/app"