Angular 和 requirejs,提供注入器

Angular and requirejs, provider with injectors

我有一个我的应用程序的工作版本,我正在尝试将其拆分为 requirejs 模块。我在让有一些注射器的供应商工作时遇到了一些麻烦。似乎当我将它引入 require js 时,它不想正确注入我的提供者。我需要一些帮助,这个让我很困惑。

这就是我的意思 -

提供商 -

  define('test/my-provider',['angular',
     'test/my-factory'
 ],
 function myProvider(angular, MYfactory) {
     var metadata = {
         componentName: 'myProvider',
         moduleName: 'test.myProvider'
     };
     var $moduleObjectProvider;

     $moduleObjectProvider.$inject = [];

     $moduleObjectProvider = function() {
         var trackConstructor = {};

         this.moduleConstructor = function(name, cb) {
            //constructor
         };

         var $get;
         this.$get = $get;

         $get.$inject = ['URLfactory', '$log', '$location'];

         $get = function(URLfactory, $log, $location) {
             return {
                 function1: function(var1) {

                 },
                 function2: function(var1, var2) {

                 },
                 function3: function() {

                 }
             };
         };
     };
     //metadata.componentName ?
     angular.module(metadata.moduleName, []).provider(metadata.componentName, $moduleObjectProvider);

     return metadata;
 }

);

我遇到的问题是喷油器 -

   TypeError: Cannot set property '$inject' of undefined

指向包含

的行
  $moduleObjectProvider.$inject = [];

值得一提的是我更改了顶部位的格式(JSlinter 对我大吼大叫)。在将其转换为 requirejs 格式之前工作时,最高位看起来像这样:

   $moduleObjectProvider.$inject = [];

function $moduleObjectProvider() {

似乎一切正常,喷油器在这里有问题(我认为)。我在这里碰壁了——如果有人能对这种情况有所了解,那就太好了。谢谢!

因为你做的var myFunction = function(){}你的函数没有'hoisted'到最上面。所以在设置 $inject 数组时是未定义的。将其更改为 function myFunction(){} 应该没问题。