gpt4 book ai didi

javascript - 如何配置 Angular 以使用没有尾部斜杠的基本路由?

转载 作者:行者123 更新时间:2023-12-02 04:54:09 27 4
gpt4 key购买 nike

期望的行为

我有一个位于此 URL 的搜索页面:

http://example.com/search

所需的行为是将提供的查询参数传递给页面,并在用户键入不同的查询时进行更新。

例如,

http://example.com/search?q=foo

在页面加载时在包含“foo”的搜索框中产生结果。如果用户在搜索框中输入“delicious pancakes”,地址栏的 URL 将自动更新为:

http://example.com/search?q=delicious+pancakes

这部分工作正常;我正在使用 $watch监视查询的值,然后通过 $location.search('q', newValue) 更新地址栏.

但我想使用 HTML5 模式(我正在使用 $locationProvider.html5Mode(true) ),并且我需要 hashbang 回退才能为 IE9 用户工作。

我希望 hashbang 后备看起来像这样:

http://example.com/search#?q=delicious+pancakes

问题

如果我不设置 <base>元素,$location 服务将域之后的所有内容都视为路径,因此在 IE9 中它实际上回退到这个:

http://example.com/#search?q=delicious+pancakes

这导致浏览器重定向到主页(即,它使我完全离开搜索页面!)

所以最好的做法似乎是使用 <base>标签;所以我把它设置为

<base href="http://example.com/search/"></base>

(注意尾部的斜杠;我知道 Angular 和 HTML 规范都要求这样做。)

但是,这意味着我必须使用以下 URL:

http://example.com/search/?q=delicious+pancakes

(IE9 回退为 http://example.com/search/#?q=delicious+pancakes)

这行得通,但我不想要求用户在“搜索”之后和问号之前键入斜线。目前,如果我尝试通过 http://example.com/search?q=foo 访问该页面,我在控制台中收到此错误:

TypeError: whole is undefined

这个错误显然是由 $location 服务的 $$rewrite 引起的函数不返回任何东西。作为引用,我将从 angular.js 复制源代码:

this.$$rewrite = function(url) {
var appUrl, prevAppUrl;

if ( (appUrl = beginsWith(appBase, url)) !== undefined ) {
prevAppUrl = appUrl;
if ( (appUrl = beginsWith(basePrefix, appUrl)) !== undefined ) {
return appBaseNoFile + (beginsWith('/', appUrl) || appUrl);
} else {
return appBase + prevAppUrl;
}
} else if ( (appUrl = beginsWith(appBaseNoFile, url)) !== undefined ) {
return appBaseNoFile + appUrl;
} else if (appBaseNoFile == url + '/') {
return appBaseNoFile;
}

有什么方法可以在“搜索”后没有斜杠的情况下实现所需的行为,并且仍然支持 IE9?

最佳答案

使用条件语句从 HTML5 模式中排除 IE9:

if(!!$window.innerWidth && !$window.matchMedia)
{
$locationProvider.html5Mode({enabled: false, requireBase: false});
$locationProvider.hashPrefix("search");
}
else
$locationProvider.html5Mode({enabled: true, requireBase: false});

引用资料

关于javascript - 如何配置 Angular 以使用没有尾部斜杠的基本路由?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24690748/

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