我在apache服务器上的子文件夹/draft
中有一个angular2应用程序。
为了使其正常运行,我在/草稿中添加了.htaccess
:
Options Indexes FollowSymLinks
RewriteRule ^index\.html$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /draft/index.html [L]
并将其添加到头部的/draft/index.html
:
<base href="draft/">
我的组件和其他打字稿文件位于/ draft / app /中,
我的/draft/systemjs.config.js
看起来像这样:
(function (global) {
System.config({
paths: {
'npm:': '/draft/node_modules/'
},
map: {
app: '/draft/app',
'@angular/core': 'npm:@angular/core/bundles/core.umd.js',
'rxjs': 'npm:rxjs',
// ...
},
packages: {
app: {
main: './main.js',
defaultExtension: 'js'
},
rxjs: {
defaultExtension: 'js'
}
}
});
})(this);
这一切都很好,但是当我尝试添加路由时出错了。
当用户转到/draft/foo
时,我希望显示组件FooComponent
但是当用户转到/draft/foo
时,FooComponent会按预期显示,但由于某种原因,网址会更改为/draft/draft/draft/foo
。
这是我的/draft/app/app.routing.js
:
// ...
const appRoutes: Routes = [
{
path: 'draft/foo',
component: FooComponent
}
];
export const routing: ModuleWithProviders = RouterModule.forRoot(appRoutes);
我将路由const添加到我的AppModule的导入数组/draft/app/app.module.ts
:
// ...
@NgModule({
imports: [ BrowserModule, HttpModule, routing ],
declarations: [ AppComponent, FooComponent ],
bootstrap: [ AppComponent ]
})
export class AppModule { }
/draft/app/components/AppComponent.ts
看起来像这样:
import {Component} from '@angular/core';
@Component({
selector: 'my-app',
template: '<router-outlet></router-outlet>'
})
export class AppComponent {}
那么为什么/draft/foo
被重定向到/draft/draft/draft/foo
,我该怎么做才能阻止它呢?
答案 0 :(得分:1)
显然基地不正确。 以下基础一切正常。
<base href="http://localhost/draft/" />
为了让它更具动感,我将其替换为:
<script>
document.write('<base href="' + document.location + '" />');
</script>
但这仅在使用hash location strategy
时有效,否则路径路径始终为''。所以我最终使用了以下内容:
<script>
document.write('<base href="' + document.location.protocol + '//' + document.location.host + '/draft/' + '" />');
</script>