2017-03-15 7 views
0

나는 Angular에서 고전적인 문제가 있습니다. 코드를 축소 할 때 매개 변수 확장으로 인해 '알 수없는 공급자'가됩니다.각도 1.5, 겉으로보기에 부적합한 라인에서 오류를 찾는 엄격한 모드 annotation

ng-strict-di 지시어에 대해 읽었습니다. 몇 달 전에 알려줬으면합니다. 매개 변수와 함께 전달되는 문자열 등가물을 강제 적용합니다.

내가 지금 내 unminified 코드를 사용하여이 스택 트레이스를 얻을로 내 문제를 좁힐 수있었습니다 : 그래서 문제가 타사 라이브러리 것 같다

enter image description here

, 내가 댓글을 달았을 어디에 오류가 발생합니다 :

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);으로 주석 처리하면 오류가 사라집니다. 이것은 배열로 객체를 밀어 넣는 것만 큼 이상하게 보입니다.

+0

opentok 라이브러리 모듈 때문인지 모르겠다. 주입 의존성에 대한 또 다른 문제가 있다고 생각한다. 자세한 내용은 다음을 참조하십시오. http://stackoverflow.com/a/33494259/861206 하지만 앱의 어딘가에서는 매퍼가 삽입되지 않은 함수를 호출하므로 정의되지 않은 잘못된 함수로 함수가 매핑됩니다. 것처럼한다면 : .controller ("FirstController" [ "$ rootScope", "$ HTTP", "$ 필터"기능 ($ 범위, $ HTTP, $ 필터) { } ]) 을 $ scope는 컨트롤러 내부에서 응용 프로그램의 $ rootScope가됩니다. – rbinsztock

+0

감사합니다. 문제는 주입 할 때 매핑이 잘못되었거나 누락되었다는 것입니다. 의존성이 주입되는 모든 단일 장소를 살펴보고 저를 구하기 위해 'ng-strict-di'를 추가하면 매핑이 올바르지 않은 곳을 찾아 낼 것입니다. 이것은 un-minified 코드에서 오류를 선택하게하지만 모든 종속성이 올바르게 맵핑되는 팩토리를 가리 킵니다. 위의 코드 줄을 주석으로 처리하면 오류가 사라집니다. 그것은 DI와 관련이없는 것처럼 보입니다. –

+0

아니요, 게시 된 타사 코드에 문제가 없습니다. 'OTSession.streams.push (event.stream)'는 앱의 다른 부분에 간접적으로 영향을 미칠 수 있지만 그게 전부입니다. 오류가 말했듯이 문제는 일부 컨트롤러입니다. – estus

답변

0

당신은 컨트롤러에 $ rootScope inject를 추가 할 수 있습니다. 그래야 이것을 축소 시키면서도 XXXController와 같은 문제가 있어서는 안됩니다. $ inject = [ '$ rootScope'];

2

컨트롤러 기능을이 표기법으로 작성하십시오.

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

}]); 

이렇게하면 문제가 해결됩니다.