我尝试将信息从一个网站传递到另一个网站。这两个网站不共享相同的URL或服务器。
我认为最好的方法是使用URL参数(http://some.url?param=value)。 因此,如果我在Angular生命周期中没有记错,请在ngAfterViewInit回调之前。 通过这样做,self.route.snapshot.queryParamMap.get('param')返回空值。
如何获得此参数?还有另外一种(更清洁的)方式可以在2个有角度的网站之间传递信息吗?
最初,我的代码在ngOnInit方法中。我将此代码移至ngAfterContentInit,但未进行任何更改,路由器保持为空。
我考虑过解析window.location.href,但对我来说似乎并不干净。
app.module.ts
const appRoutes: Routes = [
{ path: 'profil', canActivate: [ Guard ], component: ProfilComponent },
/* [...] */
{ path: '**', canActivate: [Guard], redirectTo: 'profil' },
];
/* [...] */
@NgModule({
declarations: [
ProfilComponent,
/* [...] */
],
/* [...] */
imports: [
RouterModule.forRoot(appRoutes),
],
entryComponents: [],
bootstrap: [AppComponent]
})
export class AppModule { }
app.component.ts
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
})
export class AppComponent implements AfterContentInit {
constructor() {}
ngAfterContentInit() {
const self = this;
self.logger.debug(self.route); // empty
self.logger.debug(self.route.snapshot.queryParamMap.get('param')); // null
if (self.route.snapshot.queryParamMap.get('param')) {
localStorage.clear();
localStorage.setItem('externalParam', self.route.snapshot.queryParamMap.get('param'));
}
}
}
app.component.ts
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
})
export class AppComponent implements AfterContentInit {
constructor() {}
isAuth(): boolean {
return !!localStorage.getItem('externalParam');
}
ngAfterContentInit() {
const self = this;
self.logger.debug(self.route); // empty
self.logger.debug(self.route.snapshot.queryParamMap.get('param')); // null
if (self.route.snapshot.queryParamMap.get('param')) {
localStorage.clear();
localStorage.setItem('externalParam', self.route.snapshot.queryParamMap.get('param'));
}
}
}
app.component.html
<div id="container" class="h-100">
<app-nav *ngIf="isAuth()"></app-nav>
<div id="body" class="h-100">
<router-outlet></router-outlet>
</div>
</div>
nav.component.ts
@Component({
selector: 'app-nav',
templateUrl: './nav.component.html',
})
export class NavComponent implements OnInit {
param: any;
constructor() {}
ngOnInit() {
this.param = localStorage.getItem('externalParam');
}
}
为示例简化了以下文件
nav.component.ts
@Component({
selector: 'app-nav',
templateUrl: './nav.component.html',
})
export class NavComponent implements OnInit {
param: any;
constructor() {}
ngOnInit() {
this.param = localStorage.getItem('externalParam');
}
}
nav.component.html
<h1>{{param}}</h1>
如上所述,目前我无法从URL获取参数。 Router对象为空。