Angularjs 角度1.5,严格模式注释在看似无关的线上发现错误

Angularjs 角度1.5,严格模式注释在看似无关的线上发现错误,angularjs,strict,Angularjs,Strict,我在Angular中遇到了一个典型的问题,当我缩小代码时,由于参数混乱,我得到了“未知提供者” 我读到了ngstrictdi指令(我希望几个月前就知道该指令!),该指令用于强制将字符串等价物与参数一起传递 这有助于我缩小问题范围,因为我现在使用未统一的代码获取此堆栈跟踪: 因此,问题似乎出现在第三方库中,我已经评论了错误发生的位置: ng.module('opentok', []) .factory('OT', function() { return OT; }) .fac

我在Angular中遇到了一个典型的问题,当我缩小代码时,由于参数混乱,我得到了“未知提供者”

我读到了
ngstrictdi
指令(我希望几个月前就知道该指令!),该指令用于强制将字符串等价物与参数一起传递

这有助于我缩小问题范围,因为我现在使用未统一的代码获取此堆栈跟踪:

因此,问题似乎出现在第三方库中,我已经评论了错误发生的位置:

ng.module('opentok', [])
  .factory('OT', function() {
    return OT;
  })
  .factory('OTSession', ['OT', '$rootScope',
    function(OT, $rootScope) {
      var OTSession = {
        streams: [],
        connections: [],
        publishers: [],
        init: function(apiKey, sessionId, token, cb) {
          this.session = OT.initSession(apiKey, sessionId);

          OTSession.session.on({
            sessionConnected: function() {
              OTSession.publishers.forEach(function(publisher) {
                OTSession.session.publish(publisher);
              });
            },
            streamCreated: function(event) {
              //ERROR OCCURS ON THE LINE BELOW
              $rootScope.$apply(function() {
                OTSession.streams.push(event.stream);
              });
            },
            streamDestroyed: function(event) {
              $rootScope.$apply(function() {
                OTSession.streams.splice(OTSession.streams.indexOf(event.stream), 1);
              });
            },
            sessionDisconnected: function() {
              $rootScope.$apply(function() {
                OTSession.streams.splice(0, OTSession.streams.length);
                OTSession.connections.splice(0, OTSession.connections.length);
              });
            },
            connectionCreated: function(event) {
              $rootScope.$apply(function() {
                OTSession.connections.push(event.connection);
              });
            },
            connectionDestroyed: function(event) {
              $rootScope.$apply(function() {
                OTSession.connections.splice(OTSession.connections.indexOf(event.connection), 1);
              });
            }
          });

          this.session.connect(token, function(err) {
            if (cb) cb(err, OTSession.session);
          });
          this.trigger('init');
        },
        addPublisher: function(publisher) {
          this.publishers.push(publisher);
          this.trigger('otPublisherAdded');
        }
      };
      OT.$.eventing(OTSession);
      return OTSession;
    }
  ])
一切似乎都井然有序,错误发生的那一行似乎与DI无关。你能看出什么地方不对劲吗

更新
如果我注释掉行
OTSession.streams.push(event.stream)然后错误消失。这看起来很奇怪,因为它所做的只是将一个对象推送到一个数组中。

能否将$rootScope注入添加到控制器中,以便在缩小时不会出现任何问题,如XXXController。$inject=['$rootScope']

能否将$rootScope注入添加到控制器中,以便在缩小时不会出现任何问题,如XXXController。$inject=['$rootScope']

用这种符号编写控制器函数

module.controller('AppCtrl', ['$scope','$timeout', function 
 ($scope,$timeout) {

}]);

这应该可以解决问题。

用此符号编写控制器函数

module.controller('AppCtrl', ['$scope','$timeout', function 
 ($scope,$timeout) {

}]);

这应该可以解决问题。

我不知道这是否是由于opentok库模块造成的,我认为您在注入依赖性方面还有另一个问题。您可以阅读更多信息:但在应用程序中的某个地方,您调用了未注入映射器的函数,因此应用程序的函数映射了未定义的错误函数。就像我这样做:。控制器(“FirstController”、[“$rootScope”、“$http”、“$filter”、函数($scope、$http、$filter){}])$scope将是控制器内应用程序的$rootScope。谢谢。但我知道问题在于a映射在注入时是错误的或丢失的。为了避免我仔细查看每个注入依赖项的地方,我读到添加“ng strict di”将指出映射不正确的地方。这使得错误在未缩小的代码中被发现,但它指向一个工厂,在那里所有依赖项都被正确映射。很奇怪,如上所述注释掉代码行会使错误消失。它似乎与DI无关。不,问题不在发布的第三方代码中
OTSession.streams.push(event.stream)
可能会间接影响应用程序的其他部分,但仅此而已。正如错误所说,问题出在某个控制器上。您能否为其提供plunker链接,当前发布的代码与此无关。另外,请发布html部分,似乎您的ng应用程序不是您在此处发布的应用程序。我不知道这是否是由于opentok库模块造成的,我认为您在注入依赖性方面还有另一个问题。您可以阅读更多信息:但在应用程序中的某个地方,您调用了未注入映射器的函数,因此应用程序的函数映射了未定义的错误函数。就像我这样做:。控制器(“FirstController”、[“$rootScope”、“$http”、“$filter”、函数($scope、$http、$filter){}])$scope将是控制器内应用程序的$rootScope。谢谢。但我知道问题在于a映射在注入时是错误的或丢失的。为了避免我仔细查看每个注入依赖项的地方,我读到添加“ng strict di”将指出映射不正确的地方。这使得错误在未缩小的代码中被发现,但它指向一个工厂,在那里所有依赖项都被正确映射。很奇怪,如上所述注释掉代码行会使错误消失。它似乎与DI无关。不,问题不在发布的第三方代码中
OTSession.streams.push(event.stream)
可能会间接影响应用程序的其他部分,但仅此而已。正如错误所说,问题出在某个控制器上。您能否为其提供plunker链接,当前发布的代码与此无关。另外,请张贴html部分,似乎你的ng应用程序不是你在这里发布的