2016-02-16 25 views
8

Ho sviluppato un parser per i miei componenti angular2 che li rende nel mio file HTML. Finora sono in grado di renderli in HTML comeCome utilizzare il rendering lato server 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"; 
    } 
} 

Poi il mio HTML statico viene generato in modo corretto, ma se sto usando la mia componente in questo modo:

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"; 
    } 
} 

Poi i miei componenti vengono caricati in HTML correttamente, ma il mio codice HTML statico non viene generato correttamente. Vedere le immagini qui sotto: componenti sono caricati nel navigatore Components

Ma HTML statico non viene generato correttamente finestra della console per HTML statico 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>

Ho provato il repository git Hub aggiornata del @alexpods Grazie in anticipo.

risposta

4

ho avuto lo stesso problema con universal-starter-kit Provate i https://github.com/pmachowski/angular2-starter-kit

Pro: il rendering

  • lato server funziona effettivamente
  • lavoratore web
  • produzione pronto
  • buona struttura
  • fase di sviluppo attivo
  • moderna pila (webpack, il karma, goniometro)
  • unità & test E2E

+0

Provato questo ... ma i miei moduli di nodo non vengono installati @Peter –

+1

@BhushanGadekar Posso vedere che sei su Windows. Sono su un Mac e non ci sono problemi con node_modules. Forse se pubblichi il messaggio di errore potrei aiutarti. –

+0

'digitazioni ERR! messaggio Impossibile risolvere "github: typings/typed-es6-promise" \ n digitazioni ERR! causato da Impossibile connettersi a "https://raw.githubusercontent.com/typings/typed-es6-promise/master/typings.json" \ n digitazioni ERR! causato da getaddrinfo ENOTFOUND proxy.example.com' –

1

Dai un'occhiata a questo example app che ho schierato di recente (https://github.com/ng-seed/universal)

Pro:

  • lato server di rendering
  • SCSS compilazione
  • pigro/percorsi asincroni
  • Sviluppo/Produzione compilazione (AOT)
  • SPA/modalità universali
  • TsLint/Codelyzer
  • Up-to-date le dipendenze (Angolare 4, piattaforma server, ecc.)
  • Stack moderno (pacchetto Web, karma, goniometro)