gpt4 book ai didi

typescript - AngularJS 2 隐藏位置策略后退导航

转载 作者:太空狗 更新时间:2023-10-29 19:35:46 29 4
gpt4 key购买 nike

我实现了一个简单的 LocationStrategy,它禁用了其他股票策略使用的浏览器地址栏更改。我想创建几个较小的应用程序,这些应用程序将被插入到浏览器位置不能被触及的任意网页中,尽管需要某种导航。这与新策略配合得很好。现在唯一缺少的是用于导航的 back() 函数。显然我不能再调用 window.back() 但我也没有找到任何可以通过读取 Angular 源来调用的内部方法。我想我可以直接调用 LocationStrategy.back() 但我仍然需要一些方法让路由器更新当前 View 。是否有我可以触发的事件或其他事件来存档 View 更新?

这是我的位置策略的当前实现:

import { Injectable, Inject, Optional, platform } from 'angular2/core';
import { LocationStrategy, PlatformLocation, APP_BASE_HREF, } from 'angular2/router';
import { joinWithSlash, normalizeQueryParams } from 'angular2/src/router/location_strategy';
import { UrlChangeListener } from 'angular2/src/router/location/platform_location';
import { isPresent } from 'angular2/src/facade/lang';

@Injectable()
export class HiddenLocationStrategy extends LocationStrategy {
private _baseHref: string = '';
private pathHistory: string[] = [];
private poppedPathHistory: string[] = [];
constructor(private _platformLocation: PlatformLocation,
@Optional() @Inject(APP_BASE_HREF) _baseHref?: string) {
super();
if (isPresent(_baseHref)) {
this._baseHref = _baseHref;
}
}

onPopState(fn: UrlChangeListener): void {
}

getBaseHref(): string { return this._baseHref }

path(): string {
return this.pathHistory.length > 0 ? this.pathHistory[this.pathHistory.length - 1] : '';
}

prepareExternalUrl(internal: string): string {
var url = joinWithSlash(this._baseHref, internal);
return url;
}

pushState(state: any, title: string, path: string, queryParams: string) {
this.pathHistory.push(path);
}

replaceState(state: any, title: string, path: string, queryParams: string) {
}

forward(): void { this.pathHistory.push(this.poppedPathHistory.pop()); }

back(): void { this.poppedPathHistory.push(this.pathHistory.pop()); }
}

最佳答案

我会尝试提供一个自定义的PlatformLocation https://github.com/angular/angular/blob/master/modules/angular2/src/platform/browser/location/platform_location.ts并调用它的 forward()back() 方法。

abstract onPopState(fn: UrlChangeListener): void;
abstract onHashChange(fn: UrlChangeListener): void;

好像是路由器订阅的事件。

另见 https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onpopstate

关于typescript - AngularJS 2 隐藏位置策略后退导航,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35896041/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com