2016-12-14 2 views
2

У меня есть проект asp.net-mvc с угловым элементом. Используйте, чтобы запустить приложение iis, которое запустит index.cshtml в папке Home (инициируется с домашнего контроллера). Таким образом, я изменил для углового, следующим образом, индексный файл:Угловой 2 неправильный путь для system.import ('app')

<!DOCTYPE html> 
<html> 
<head> 
    <title>Angular QuickStart</title> 
    <meta charset="UTF-8"> 
    <meta name="viewport" content="width=device-width, initial-scale=1"> 
    <link href="~/styles.css" rel="stylesheet" /> 
    <!-- Polyfill(s) for older browsers --> 
    <script src="~/node_modules/core-js/client/shim.min.js"></script> 
    <script src="~/node_modules/zone.js/dist/zone.js"></script> 
    <script src="~/node_modules/reflect-metadata/Reflect.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> 
</head> 
<body> 
    <my-app>Loading AppComponent content here ...</my-app> 
</body> 
</html> 

Теперь, когда я запустить приложение System.import('app') не найти папку приложения, так как сделать этот запрос:

zone.js: 1382 GET http://localhost/app/main.js 404 (Не найдено)

однако, если я вручную вызвать домашний контроллер, правильно отображает путь:

http://localhost/my_virtual_path/app/main.js

Почему такое поведение? Я могу изменить system.import, чтобы увидеть путь относительно уровня проекта?

для полноты картины, это system.config.js:

/** 
* System configuration for Angular samples 
* Adjust as necessary for your application needs. 
*/ 
(function (global) { 
    System.config({ 
    paths: { 
     // paths serve as alias 
     'npm:': 'node_modules/' 
    }, 
    // map tells the System loader where to look for things 
    map: { 
     // our app is within the app folder 
     app: 'app', 

     // angular bundles 
     '@angular/core': 'npm:@angular/core/bundles/core.umd.js', 
     '@angular/common': 'npm:@angular/common/bundles/common.umd.js', 
     '@angular/compiler': 'npm:@angular/compiler/bundles/compiler.umd.js', 
     '@angular/platform-browser': 'npm:@angular/platform-browser/bundles/platform-browser.umd.js', 
     '@angular/platform-browser-dynamic': 'npm:@angular/platform-browser-dynamic/bundles/platform-browser-dynamic.umd.js', 
     '@angular/http': 'npm:@angular/http/bundles/http.umd.js', 
     '@angular/router': 'npm:@angular/router/bundles/router.umd.js', 
     '@angular/forms': 'npm:@angular/forms/bundles/forms.umd.js', 

     // other libraries 
     'rxjs':      'npm:rxjs', 
     'angular-in-memory-web-api': 'npm:angular-in-memory-web-api/bundles/in-memory-web-api.umd.js', 

     // librerie di terze parti 
     'angular2-datatable': 'npm:angular2-datatable', 
     'lodash': 'npm:lodash/lodash.js', 
    }, 
    // packages tells the System loader how to load when no filename and/or no extension 
    packages: { 
     app: { 
     main: './main.js', 
     defaultExtension: 'js' 
     }, 
     rxjs: { 
     defaultExtension: 'js' 
     }, 


     'angular2-datatable': { 
      main: 'index.js', 
      defaultExtension: 'js' 
     }, 

    } 
    }); 
})(this); 
+0

Сообщение содержание systemjs.config.js –

+0

я добавил, но я не думаю, что это полезно, поскольку я не хочу менять относительные пути. – FeroX

ответ

1

Прежде всего, я настоятельно рекомендую вам не использовать ASP.NET MVC или что-то подобное для углового приложения. Не нужно. Вы можете использовать его как службу отдыха (asp.net web api). Во всяком случае, я думаю, что эта проблема возникает из пути приложения (приложения IIS) Таким образом, вам нужно добавить этот тег в голову HTML файла:

<head> 
<base href="/my_virtual_path/"> 
..... 
+0

Устранить проблему, но я ищу решение с относительным путем, чтобы избежать необходимости изменять файл, когда я поделился им с коллегой. – FeroX

+0

Вы не можете сделать это, как asp.net. Потому что asp.net отображает страницы на сервере. И обратите внимание, что вам не нужно использовать (/ my_virtual_path /), потому что ваш путь начинается с root (www.domain.com). И не забывайте, что базовый тег () необходим в приложениях Angular2 (см. Ссылку). Это полное описание для вас. –

+0

И передумайте и забудьте подход asp.net. НЕТ НУЖНОСТИ на стороне сервера в приложениях angularjs, angular2 и ...... –