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