angular 2 等效于 react renderToString

Posted

技术标签:

【中文标题】angular 2 等效于 react renderToString【英文标题】:angular 2 equivalent of react renderToString 【发布时间】:2016-10-18 14:28:59 【问题描述】:

我正在寻找 react-dom/server.renderToString 的 angular 2 等价物

import  renderToString  from 'react-dom/server';    
// Render the component to a string
const html = renderToString(
  <App />
);

使用 NodeJs 将指令/组件转换为 HTML 的最简单的代码示例是什么?

我想应该可以使用以下软件包之一:

@angular/compiler - v2.0.0-rc.2

@angular/platform-server - v2.0.0-rc.2

【问题讨论】:

你的目标是什么?您可以使用 ComponentResolver 创建 ComponentFactory 并动态创建组件,然后获取 ComponentRef 然后将 HTMLElement 转换为字符串。 @kemsky 你能提供一个答案,用代码演示该解决方案吗? 【参考方案1】:

Angular 组件使用 HTML 模板作为开发过程的一部分,但我们实际上将这些模板编译为 javascript,而不是 HTML,以便将它们呈现给浏览器。

可能对您有帮助的最接近的事情是查看https://github.com/angular/universal。这个项目代表了在服务器上运行 Angular 组件的最佳方式,该方式呈现 javascript 和 HTML,并通过网络将其传递给浏览器。

我们不能提供一个简单的方法来“渲染”到 HTML,因为任何类型的“渲染”都涉及到整个 Angular 框架(核心、通用、模板编译)并处理你的整个组件树。

希望这会有所帮助!

【讨论】:

谢谢,我对 angular/universal 进行了更深入的了解,他们有一个名为 renderDocument 的函数,它实际上可以满足我的需要,但它已被弃用。 github.com/angular/universal/blob/master/modules/universal/src/… 应该类似于:function (componentType, nodeProviders) return bootstrap(componentType, nodeProviders) .then((appRef) =&gt; stringifyElement(appRef.location.nativeElement)) 【参考方案2】:
import 'angular2-universal/polyfills';
import 
  provide,
  REQUEST_URL,
  ORIGIN_URL,
  NODE_ROUTER_PROVIDERS,
  NODE_HTTP_PROVIDERS,
  Bootloader
 from 'angular2-universal';

import  APP_BASE_HREF  from '@angular/common';

const bootloader = new Bootloader(
  platformProviders: [
    provide: ORIGIN_URL, useValue: 'http://localhost:3000',
    provide: APP_BASE_HREF, useValue: '/'
  ],
  async: true,
  preboot: false //  appRoot: 'app-root'  // your top level app component selector
);

export function ngApp(req, res) 
  let url = req.originalUrl || '/';

  const config = 
    template: `<!doctype html><html><head>...</head><body>...</body></html>`,
    directives: [AppComponent],
    providers: [
      provide: REQUEST_URL, useValue: url,
      ...NODE_ROUTER_PROVIDERS,
      ...NODE_HTTP_PROVIDERS
    ]
  ;

  bootloader.serializeApplication(config)
  .then(html => res.send(html));

【讨论】:

不知道你为什么把它和 express 混在一起。猜猜这根本没有必要。你为什么不包括 import 语句?

以上是关于angular 2 等效于 react renderToString的主要内容,如果未能解决你的问题,请参考以下文章

在 React 中等效于来自 React Native 的 FlatList

Rxjs 6 等效于 Observable.create(subscriber -> ...).share()

Angular 2 - ngShow 等效? [复制]

显示:React Native 中的内联等效项

React Js 客户端路由类似于 Angular 路由或 stateRouter

firebase 中的 swift 代码等效于目标 c