尝试使用ui-router使用
html5Mode时,我收到上述错误.任何人都可以指出我在做错什么?
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中设置了基本的URL:
<base href="/app/" />
我遇到同样的问题,在我的情况下,未定义的“url”参数传递给trimEmptyHash()最终来自于$$位置上的$$absUrl属性未被初始化的事实.进一步挖掘,似乎$$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.在我的情况下,这是因为我用于提供应用程序(CompanyName / admin.html)的URL实际上高于我为应用程序设置的基准Href(CompanyName / admin /),因此没有条件解决为true .一旦我将基准Href更改为CompanyName /,我就不再遇到这个问题.
或者,您可以在位置原型上初始化$$absUrl,或者从Angular – watch this issue等待某种修复,并查看joelmdev于3月30日提出的解决方法.