2017-02-08 13 views
0

Я пытаюсь использовать Razor для генерации html, используемого в угловом шаблоне. Я использую Angular v 2.0.0. У меня есть Contract.cshtml, который выглядит как:Использование Razor для генерации шаблонов Angular2

<script> 
    System.import('contract.js').catch(function(err){ console.error(err); }); 
</script> 
<my-contract> 
    <h1>Hello {{name}} this is a quick starter for angular 2 app</h1> 
</my-contract> 

А Contract.ts, который выглядит как

import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; 
import { ContractModule } from './app/Contract/contract.module'; 
platformBrowserDynamic().bootstrapModule(ContractModule); 

А contract.component.ts, который выглядит как:

import { NgModule }  from '@angular/core'; 
import { BrowserModule } from '@angular/platform-browser'; 
import { ContractComponent } from './contract.component'; 
@NgModule({ 
    imports:  [ BrowserModule ], 
    declarations: [ ContractComponent ], 
    bootstrap: [ ContractComponent ] 
}) 
export class ContractModule { } 

и А contract.component.ts, который выглядит следующим образом:

import { Component } from '@angular/core'; 
@Component({ 
    selector: 'my-contract' 
}) 
export class ContractComponent { 
    public name = 'Nigel Findlater'; 
    consturctor() {} 
} 

Когда я запускаю это я получаю

Error: Error: No template specified for component ContractComponent  
     at DirectiveNormalizer.normalizeDirective (http://localhost:2600/lib/@angular/compiler/bundles/compiler.umd.js:13476:21)    at RuntimeCompiler._createCompiledTemplate (http://localhost:2600/lib/@angular/compiler/bundles/compiler.umd.js:16869:210) 
      at eval (http://localhost:2600/lib/@angular/compiler/bundles/compiler.umd.js:16807:43) 
      at Array.forEach (native) 
      at eval (http://localhost:2600/lib/@angular/compiler/bundles/compiler.umd.js:16805:50) 
      at Array.forEach (native) 
      at RuntimeCompiler._compileComponents (http://localhost:2600/lib/@angular/compiler/bundles/compiler.umd.js:16804:45) 
      at RuntimeCompiler._compileModuleAndComponents (http://localhost:2600/lib/@angular/compiler/bundles/compiler.umd.js:16741:39) 
      at RuntimeCompiler.compileModuleAsync (http://localhost:2600/lib/@angular/compiler/bundles/compiler.umd.js:16732:23) 
      at PlatformRef_._bootstrapModuleWithZone (http://localhost:2600/lib/@angular/core/bundles/core.umd.js:6954:29) 
     Evaluating http://localhost:2600/contract.js 
     Error loading http://localhost:2600/contract.js 

Я думаю, что ошибка в contract.component.ts, но я не знаю, как не указывать шаблон здесь

+0

В вашем компоненте my-contract у вас будет шаблон 'template' или' templateUrl', указанный в декораторе '@ Component'. https://angular.io/docs/ts/latest/api/core/index/Component-decorator.html – silentsod

+0

Я хотел бы использовать contract.cshtml для создания шаблона. Если я использую templateUrl Мне нужно использовать html-файл, и если я использую шаблон, я должен указать html непосредственно в ts. Должен ли я использовать что-то еще? –

ответ

0

Angular2 не предназначен для использования с шаблонами, созданными Razor. Лучше разрешить Angular2 обрабатывать всю маршрутизацию, а не использовать MVC, потому что это добавляет ненужную зависимость, которая делает проект более сложным для тестирования.

0

Я использую Angular для разгрузки большого количества работы с сервера на клиентские и хост сложные веб-сайты, используя гораздо меньше ресурсов. Эти веб-сайты не являются ООПТ. В этом контексте очень полезно использовать ASP.NET-роутер и созданные бритвой шаблоны (иногда предварительно скомпилированные). Единственная проблема, с которой я столкнулся при использовании шаблонов, созданных бритвами в Угловом, был способ был настроен webpack. После удаления angular2-template-loader все работает плавно.

+0

Да, вы правы, в больших веб-сайтах проще не иметь все в 1 СПА. Я пытался использовать подход, который я использовал в Angular 1.x, где можно использовать только маршрутизацию ASP.NEt и использовать Anguar как своего рода виртуальную машину в браузере. Это не работает, –

+0

Ну, я сделал это с Angularjs (1.x), и я делаю то же самое с Angular 2 и 4 без каких-либо проблем. – Serby

+0

Пожалуйста, отредактируйте свой ответ, чтобы включить решение, затем мы можем обсудить его. –