2016-02-16 7 views
8

Я разработал синтаксический анализатор для моих компонентов angular2, который отображает их в моем файле HTML. До сих пор я могу сделать их в HTML, какКак использовать рендеринг на стороне сервера Angular 2

import {Component} from 'angular2/core'; 
import {NgSwitch, NgSwitchWhen, NgSwitchDefault,NgFor} from 'angular2/common'; 
import {Http, Response} from 'angular2/http'; 
import {Observable} from 'rxjs/Rx'; 

@Component({ 
    selector: 'app',  
    template: ` 
      <div> 
       <div> 
        <img src={{record}} class="pull-left image-responsive" style="width:50%;"> 
        <img src={{record}} class="pull-right image-responsive" style="width:30%;"> 
       </div> 
       <div> 
        <img src={{record}} class="pull-right image-responsive" style="width:100%;"> 
       </div> 
       <br/><br/> 
       <div> 
        <table class="table-responsive" style="width:100%;border-collapse:separate;border:solid #D8D8D8 2px;border-radius:5px;"> 
         <tr style="background-color: grey;"> 
          <th style="text-align:center;">{{record}}</th> 
          <th style="border-left:2px solid #f5821f;text-align:center;">{{record}}</th> 
         </tr> 
         <tr style="text-align:center;"> 
          <td >&nbsp;</td> 
          <td style="border-left:2px solid #f5821f;">&nbsp;</td> 
         </tr> 
        </table> 
       </div> 
       <br/> 
      </div> 
      ` 
}) 
export class App{ 
    public record; 
    constructor() {  
     this.record="angular2"; 
    } 
} 

Тогда мой статический HTML получает сгенерирована правильно, но если я использую мой компонент, как это:

import {Component} from 'angular2/core'; 
import {NgSwitch, NgSwitchWhen, NgSwitchDefault,NgFor} from 'angular2/common'; 
import {Http, Response} from 'angular2/http'; 
import {Observable} from 'rxjs/Rx'; 
import {Component1} from './component_1/component_1.component'; 
import {Component2} from './component_2/component_2.component'; 

@Component({ 
    selector: 'app', 
    directives: [Component1,Component2], 
    template: ` 
     <div class="container"> 
      <div class="row"> 
       <component_1>loading...</component_1> 
      </div> 
      <div class="row"> 
       <component_2>loading...</component_2> 
      </div>    
     </div> 
    ` 
}) 
export class App{ 
    public record; 
    constructor() {  
     this.record="angular2"; 
    } 
} 

Тогда мои компоненты загружаются в HTML правильно, но мой статический HTML генерируется неправильно. Смотрите изображения ниже: компоненты загружаются в браузере Components

Но статический HTML не сгенерированные правильно консольное окно для статического HTML Console for Static HTML

Server.ts

import * as path from 'path'; 
 
import * as express from 'express'; 
 
import * as universal from 'angular2-universal-preview'; 
 
// Angular 2 
 
import {App} from './app/app.component' 
 
let app = express(); 
 
let root = path.join(path.resolve(__dirname, '..')); 
 

 
// Express View 
 
app.engine('.ng2.html', universal.ng2engine); 
 
app.set('views', __dirname); 
 
app.set('view engine', 'ng2.html'); 
 

 
// Serve static files 
 
app.use(express.static(root)); 
 
var i = 0; 
 
// Routes 
 

 
app.use('/', (req, res) => { 
 
    res.render('index_new', {App}, function(err,html){ 
 
     console.log("------------------My HTML ---------\n"+(i++)); 
 
     console.log(html); 
 
     console.log("------------------My HTML ----------"); 
 
     res.send(html); 
 
    }); 
 
}); 
 

 
// Server 
 
app.listen(3000,() => { 
 
    console.log('Listen on http://localhost:3000'); 
 
});

index_new.ng2.html

<!doctype html> 
 
<html lang="en"> 
 

 
<head> 
 
    <link rel="icon" href="data:;base64,iVBORw0KGgo="> 
 
    <link href="\node_modules\bootstrap\dist\css\bootstrap.min.css" rel="stylesheet" /> 
 
    <link href="\node_modules\bootstrap\dist\css\style.css" rel="stylesheet" /> 
 
    <script src="/node_modules/es6-shim/es6-shim.js"></script> 
 
    <script src="/node_modules/es6-promise/dist/es6-promise.js"></script> 
 
    <script src="/node_modules/reflect-metadata/Reflect.js"></script> 
 
    <script src="/node_modules/zone.js/dist/zone-microtask.js"></script> 
 
    <script src="/node_modules/zone.js/dist/long-stack-trace-zone.js"></script> 
 
    <script src="/dist/client/bundle.js"></script>  
 
</head> 
 
<body> 
 
    <app>Loading....</app>  
 
</body> 
 
</html>

Я попробовал обновленный GIT репозиторий ступице @alexpods Спасибо заранее.

ответ

4

Я была такая же проблема с universal-starter-kit Попробуйте https://github.com/pmachowski/angular2-starter-kit

Pros:

  • стороне сервера визуализации на самом деле работает
  • веб рабочий
  • производство готовых
  • хорошая структура
  • при активном развитии
  • современного стек (WebPack, карма, транспортир)
  • блока & e2e тесты

+0

Пробовал это ... но мои узловые модули не устанавливаются @Peter –

+1

@BhushanGadekar Я вижу, что вы в Windows. Я нахожусь на Mac, и нет проблем с node_modules. Может быть, если вы опубликуете сообщение об ошибке, я мог бы помочь. –

+0

'typings ERR! сообщение Невозможно разрешить «github: typings/typed-es6-prom» \ n typings ERR! вызванное Невозможно подключиться к «https://raw.githubusercontent.com/typings/typed-es6-promise/master/typings.json» \ n Типизация ERR! вызванный getaddrinfo ENOTFOUND proxy.example.com' –

1

Посмотрите на этой example app что я развернутую недавно (https://github.com/ng-seed/universal)

Доходы:

  • стороне сервера визуализации
  • SCSS компиляции
  • Lazy/асинхронные маршруты
  • Разработка/Производство (АОП) компиляция
  • SPA/Универсальные режимы
  • TsLint/Codelyzer
  • уточненный зависимостей (Угловой 4, платформа-сервер и т. Д.)
  • Современный стек (webpack, карма, транспортир)

 Смежные вопросы

  • Нет связанных вопросов^_^