尝试将html5Mode
与ui-router一起使用时,我遇到了上述错误。谁能指出我做错了什么?
TypeError: Cannot read property 'replace' of undefined
at bd (angular.js:10555)
at Object.<anonymous> (angular.js:11403)
at l.$get.l.$digest (angular.js:14222)
at l.$get.l.$apply (angular.js:14493)
at angular.js:1449
at Object.e [as invoke] (angular.js:4182)
at d (angular.js:1447)
at sc (angular.js:1467)
at Jd (angular.js:1361)
at HTMLDocument.<anonymous> (angular.js:26086)
angular.js
中的该细分受众群是:
10554 function trimEmptyHash(url) {
10555 return url.replace(/(#.+)|#$/, '$1');
10556 }
路由文件:
(function(){
'use strict';
angular
.module('app')
.config(routes);
routes.$inject = ['$stateProvider', '$locationProvider'];
function routes($stateProvider, $locationProvider) {
// Configure app states
$stateProvider
.state('app', {
abstract: true,
templateUrl: 'modules/app/app.html',
controller: 'AppController'
})
.state('app.home', {
url: '/',
templateUrl: 'modules/home/index.html'
});
$locationProvider.html5Mode(true);
}
})();
我在html中设置了基本网址:
<base href="/app/" />
答案 0 :(得分:11)
我遇到了同样的问题,在我的情况下,传递给trimEmptyHash()的未定义的“url”参数最终来自于$ location的$ absUrl propery没有被初始化。进一步深入研究,似乎$$ absUrl通常在$$ compose()方法中初始化,该方法通常从$$ parse()调用,通常从$$ parseLinkUrl()方法调用。这是$$ parseLinkUrl()(查看Angular 1.4.1):
this.$$parseLinkUrl = function(url, relHref) {
if (relHref && relHref[0] === '#') {
// special case for links to hash fragments:
// keep the old url and only replace the hash fragment
this.hash(relHref.slice(1));
return true;
}
var appUrl, prevAppUrl;
var rewrittenUrl;
if ((appUrl = beginsWith(appBase, url)) !== undefined) {
prevAppUrl = appUrl;
if ((appUrl = beginsWith(basePrefix, appUrl)) !== undefined) {
rewrittenUrl = appBaseNoFile + (beginsWith('/', appUrl) || appUrl);
} else {
rewrittenUrl = appBase + prevAppUrl;
}
} else if ((appUrl = beginsWith(appBaseNoFile, url)) !== undefined) {
rewrittenUrl = appBaseNoFile + appUrl;
} else if (appBaseNoFile == url + '/') {
rewrittenUrl = appBaseNoFile;
}
if (rewrittenUrl) {
this.$$parse(rewrittenUrl);
}
return !!rewrittenUrl;
};
在我的例子中,最后的“if”子句没有触发对$$解析的调用,因为“rewrittenUrl”从未得到一个值,因为中间的if / else if子句都没有解析为true。在我的情况下,这是因为我用来为应用程序提供的URL(CompanyName / admin.html)实际上高于我为应用程序设置的基本Href(CompanyName / admin /),所以没有一个条件解析为true 。只要我将基本Href更改为CompanyName /,我就不再遇到此问题。
或者,您可以在位置原型上初始化$$ absUrl,或等待Angular的某种修复 - 观看this issue,并查看joelmdev在3月30日提出的解决方法。
答案 1 :(得分:6)
我在使用html5mode时也看到了完全相同的TypeError: Cannot read property 'replace' of undefined
错误,直到我改变了:
<base href="app/" />
到
<base href="/app/" />
注意,错过了前面的斜线。希望这可以帮助别人。
答案 2 :(得分:0)
你所在州的应用程序&#39;没有定义网址密钥。
答案 3 :(得分:0)
这里描述了你应该做的事情: ui-router on GitHub 配置服务器端路由后,只要您避免使用以下网址打开网站,一切都应该正常工作:http://localhost/app-base#/
答案 4 :(得分:-5)
你必须从html文件
中删除它<base href="/app/" />
这来自app.js代码
$locationProvider.html5Mode(true);