【问题标题】:Angular-route: TypeError: undefined is not an object (evaluating 'angular.module')Angular-route: TypeError: undefined is not an object (evalating 'angular.module')
【发布时间】:2023-10-24 19:27:01
【问题描述】:

我正在使用 require.js、angular.js 和 angular-route.js 构建我的 Angular 应用程序。

我的main.js如下:

require.config({
  // alias libraries paths
  paths: {
    'angular': 'libs/angular',
    'domReady': 'libs/domReady',
    'angularRoute': 'libs/angular-route'
  },

// angular does not support AMD out of the box, put it in a shim
 shim: {
    'angular' : {'exports' : 'angular'},
 },

// kick start application
   deps: ['./bootstrap/bootstrap',
          './libs/angular-route',
          './libs/bootstrap'
         ]
});

我还是遇到了这个奇怪的错误:

[Error] TypeError: undefined is not an object (evalating 'angular.module') (匿名函数)(angular-route.js,第 24 行) 全局代码(angular-route.js,第 992 行)

有人知道我该如何解决这个问题吗?

非常感谢!

【问题讨论】:

    标签: javascript angularjs requirejs


    【解决方案1】:

    你还需要添加 angular js 依赖。

    更新自

    deps: ['./bootstrap/bootstrap',
              './libs/angular-route',
              './libs/bootstrap'
             ]
    

    deps: ['./bootstrap/bootstrap',
              'angular', // add require dependency of angular
              'angularRoute', // use path as set in require config
              './libs/bootstrap'
             ]
    

    【讨论】:

      【解决方案2】:

      我终于通过这样做解决了:

      paths: {
          'angular'  : './libs/angular',
          'domReady' : './libs/domReady',
          'jQuery'   : './libs/jquery',
          'uiRouter' : './libs/angular-ui-router',
          'bootstrap': './libs/bootstrap'
      },
      // angular does not support AMD out of the box, put it in a shim
      shim: {
        'angular': {
            exports: 'angular',
            deps: ['jQuery']
      
        },
        'uiRouter': {
            deps: ['angular']
        },
        'bootstrap': {
            deps: ['angular']
        },
      
       },
      });
      
      require(['./bootstrap']);
      

      【讨论】:

        【解决方案3】:

        我使用 Yeoman 脚手架引导我的项目,发现 karma 文件默认不包括浏览器测试中的单个文件。

        更新 Angular 为我解决了这个问题:

        {pattern: 'bower_components/angular/angular.js', included: true },
        {pattern: 'bower_components/angular-ui-router/release/angular-ui-router.js', included: false },
        

        【讨论】: