requirejs 和 angularjs 1.5 组件注入 ui.router 失败

requirejs and angularjs 1.5 injection of ui.router failing for components

我在使用推荐的组件加载方法时遇到此错误 (See step 3 )

  Error: Module name "angular-ui-router" has not been loaded yet for context: _. Use require([])

应用模块定义:

<script>
  var adminApp = angular.module('adminClientApp', [require('angular-ui-router'), 'ngMaterial', 'ngResource', 'ngMessages', 'ngMdIcons']);
</script>

根据 doco,不需要包含脚本标签 - 它将通过 requirejs 加载

Requirejs main.js 定义:

  require.config({
    paths:{
        'angular-ui-router': 'vendor/angular-ui-router/release/'
    },
    shim:{
       'angular': {
          exports: 'angular'
     }
   }
  });

应用布局:

  -- root
     index.html
     main.js
     -- js
         -- app (angular files here)
            app.js
     -- vendor (3rd party libs)

requirejs main.js 设置 index.html

  <script data-main="main.js" src="vendor/requirejs/require.js"></script>  

您使用的指南不是为 RequireJS 制作的。在那里应用说明后,您正在做这样的事情:

<script>
  var myApp = angular.module('myApp', [require('angular-ui-router')]);
</script>

这通常无法与 RequireJS 一起使用,因为使用单个字符串调用 require 会失败 除非模块已经加载 。此调用只有在 define 内才能保证有效,如下所示:

define(function (require) {
  var myApp = angular.module('myApp', [require('angular-ui-router')]);
});

此代码是一个模块,应位于单独的 .js 文件中并使用 require(['module name']) 加载。 (请注意,该参数是一个字符串数组。这是 require 的一种不同于采用单个字符串参数的形式。)

您应该使用 Component,这是您正在使用的指南的作者在 he/she 编写指南时使用的工具,或者与其等效的工具。否则,您需要转换您的代码以使用 RequireJS。