不使用哈希则无法进行角路由

时间:2020-02-05 14:46:50

标签: angular sharepoint angular2-routing single-page-application angular-router

我正在使用Angular在SharePoint中构建带有路由的单页应用程序。我能够成功使用路由的唯一方法是使用Angular的HashLocationStrategy URL样式,但如果可能的话,我想避免使用它。

使用内容编辑器Web部件将项目的HTML文件注入到页面myPage.aspx中。

这是我的RoutingModule的样子:

const routes: Routes = [
  {
    path: 'transactions',
    component: TransactionComponent,
  },
  {
    path: '',
    component: AppComponent,
  },
];

@NgModule({
  imports: [
    // useHash eliminates "Cannot retrieve the URL specified in the Content Link property" error in SharePoint
    RouterModule.forRoot(routes, { useHash: true })
  ],
  exports: [RouterModule]
})

如果我使用HashLocationStrategy并导航到https://mySite/SitePages/myPage.aspx/transactions,则会显示以下错误消息:

无法检索在Content Link属性中指定的URL。如需更多帮助,请与您的站点管理员联系。

我正在使用以下构建命令: ng build --prod --deploy-url=https://mySite/_catalogs/masterpage/Custom/myPage/dist/ --base-href=https://mySite/SitePages/myPage.aspx。我发现有必要使用--deploy-url标志,以便页面可以找到项目的其他文件,并使用--base-href标志,以便SharePoint中的功能(如页面编辑)起作用。

如何在不使用HashLocationStrategy的情况下使路由正常工作?

1 个答案:

答案 0 :(得分:1)

使用浏览器历史记录api进行路由时,需要确保将托管服务器配置为将所有请求重写为条目文件。

如果未重写您域的网址,则服务器将尝试提供一个不存在的(服务器端)页面。重写将确保所有请求都路由回您的应用程序的条目文件,然后该应用程序将负责可视化正确的(客户端)路由。

检查https://angular.io/guide/deployment了解更多信息。