角度通用问题

时间:2018-09-05 06:58:20

标签: angular angular-universal

我已将我的网站从angular 6转换为Angular Universal。 但是现在面临一个问题 Angular Universal仅适用于网站首页,而不适用于内页

有人可以让我知道如何将内部页面转换为通用角度的,因此应该对SEO友好吗?

主页:

enter image description here

内部页代码:

enter image description here

等待您的答复。

2 个答案:

答案 0 :(得分:1)

这就是角度通用的工作原理。

服务器端渲染的角度通用概念。这意味着您的角度应用程序的URL首次点击。首先,内部服务器应用程序(Express)将呈现您请求的页面。其背后的原因是允许在服务器应用程序中使用javascript,并且您可以动态更改元标记,这将改善您的SEO。

现在,如果您在应用服务器内部使用哈希分配策略,则会首先呈现APP组件,因此,如果您动态更改元标记,它将无法正常工作。

我对你的建议是...

1)。如果您使用的是HashLocation策略,则将其删除。

2)。如果您正在执行任何dom操作(jQuery)或使用任何浏览器提供的ngOnInit()中的对象(窗口,本地存储),请将其移至ngAfterViewInit()。

答案 1 :(得分:0)

您需要创建一个名为static.paths.ts的文件,并列出要在此处呈现的所有所需页面。示例:

export const ROUTES = [
  '/',
  '/your-route',
  '/your-route/child-route'
];

执行此操作后,请在prerender.ts文件中引用它,如下所示:

let previousRender = Promise.resolve();

// Iterate each route path
ROUTES.forEach(route => {
  const fullPath = join(BROWSER_FOLDER, route);

  // Make sure the directory structure is there
  if (!existsSync(fullPath)) {
    mkdirSync(fullPath);
  }

  // Writes rendered HTML to index.html, replacing the file if it already exists.
  previousRender = previousRender.then(_ => renderModuleFactory(AppServerModuleNgFactory, {
    document: index,
    url: route,
    extraProviders: [
      provideModuleMap(LAZY_MODULE_MAP)
    ]
  })).then(html => writeFileSync(join(fullPath, 'index.html'), html));
});

对于Angular 6,我强烈推荐,紧跟this video