Angular和requirejs,提供注射器

Angular and requirejs, provider with injectors

本文关键字:注射器 requirejs Angular      更新时间:2023-09-26

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

看起来一切都很好,注射器出现了问题(我认为)。我在这里遇到了麻烦——如果有人能了解一下情况,那就太好了。谢谢

因为您的do var myFunction = function(){},所以您的函数没有被"提升"到顶部。因此,在设置$inject数组时,它是未定义的。将其更改为function myFunction(){},您应该会没事的。