Angular和requirejs,提供者与注射器

时间:2015-03-17 14:43:19

标签: javascript angularjs requirejs

我有一个我的应用程序的工作版本,我试图将其拆分为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() {

似乎一切都很好,注射器在这里有问题(我想)。我在这里碰到了一堵墙 - 如果有人能够了解情况会很好。谢谢!

1 个答案:

答案 0 :(得分:1)

因为你的var myFunction = function(){}你的功能没有被“悬挂”到顶部。所以在设置$ inject数组时它是未定义的。将其更改为function myFunction(){},您应该没问题。