Ответ 1
Я столкнулся с той же проблемой, и в моем случае аргумент "url", передаваемый trimEmptyHash(), в конечном итоге исходил из того факта, что $$ absUrl propertyy на $location не инициализировался. Копаясь дальше, кажется, что $$ 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/), поэтому ни один из условных выражений не был принят к истинному, Как только я сменил базу Href на просто имя_компании/, я больше не сталкивался с этой проблемой.
В качестве альтернативы вы можете инициализировать $$ absUrl в прототипе местоположения или подождать какое-то исправление от Angular - смотреть эту проблему, и см. обходной путь, предложенный joelmdev 30 марта.