angularjs – TypeError:无法读取未定义的属性“replace”

前端之家收集整理的这篇文章主要介绍了angularjs – TypeError:无法读取未定义的属性“replace”前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
尝试使用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日提出的解决方法.

猜你在找的Angularjs相关文章