2016-10-01 2 views
0

컨트롤러 navCtrl을 사용하여 머리글 HTML에 click-anywhere-but-here이라는 지시문을 사용하려고합니다. 각도 던지고 오류 :각도 지시문로드 순서 : 컨트롤러에서 사용하는 경우 알 수없는 공급자

Unknown provider: clickAnywhereButHereProvider <-

나는이 내가 JS 파일을 연결하는 gulp을 사용하고 방법과 관련이있다 생각하고 있어요. 나는 모든 JS가 연결된 main.js 파일들을 검사했고, navCtrlclickAnywhereButHere 지시어 위에 정의되어 있는지 확인했다. 컨트롤러가 지시문을 전혀 사용하지 않았기 때문에이 문제가 전혀 발생하지 않는다면 header.html 파일 만 확인하십시오.

<header ng-controller="navCtrl"> 
    <a click-anywhere-but-here="clickedSomewhereElse()" ng-click="clickedHere()"> 
    <li>study</li> 
    </a> 
</header> 

가 어떻게 clickAnywhereButHere 지침이 불평하기 전에로드 될 때까지 기다려야 헤더를 강제 할 수 ?


편집 : 코드 :

navCtrl.js : 나는 관련이없는 많은 코드를 독차지 한

angular 
    .module('DDE') 
    .controller('navCtrl', ['$rootScope', '$location', '$scope', 'Modal', 'Auth', '$window', '$state', 'deviceDetector', 
     function($rootScope, $location, $scope, Modal, Auth, $window, $state, deviceDetector) { 

      $scope.clicked = ''; 
      $scope.clickedHere = function(){ 
       $scope.clicked = 'stop that'; 
       console.log('clicked on element'); 
      }; 
      $scope.clickedSomewhereElse = function(){ 
       console.log('clicked elsewhere'); 
       $scope.clicked = 'thanks'; 
      }; 

      $scope.headings = [ 
       {page: 'contact', route: '#/contact'} 
      ]; 
     } 
    ]); 

clickAnywhereButHere.js 지침 :

angular.module('DDE') 
.directive('clickAnywhereButHere', function($document, clickAnywhereButHereService){ 
    return { 
     restrict: 'A', 
     link: function(scope, elem, attr, ctrl) { 
      var handler = function(e) { 
       e.stopPropagation(); 
      }; 
      elem.on('click', handler); 

      scope.$on('$destroy', function(){ 
       elem.off('click', handler); 
      }); 

      clickAnywhereButHereService(scope, attr.clickAnywhereButHere); 
     } 
    }; 
}); 

clickAnywhereButHereService.js 서비스 :

angular.module('DDE') 
.factory('clickAnywhereButHereService', function($document){ 
    var tracker = []; 

    return function($scope, expr) { 
     var i, t, len; 
     for(i = 0, len = tracker.length; i < len; i++) { 
      t = tracker[i]; 
      if(t.expr === expr && t.scope === $scope) { 
       return t; 
      } 
     } 
     var handler = function() { 
      $scope.$apply(expr); 
     }; 

     $document.on('click', handler); 

     // IMPORTANT! Tear down this event handler when the scope is destroyed. 
     $scope.$on('$destroy', function(){ 
      $document.off('click', handler); 
     }); 

     t = { scope: $scope, expr: expr }; 
     tracker.push(t); 
     return t; 
    }; 
}); 

는 지침과 서비스는 모두 내 min 파일에 있습니다

enter image description here

enter image description here

+0

.directive('clickAnywhereButHere', function($document, clickAnywhereButHereService){ 

당신이'navCtrl' 우리를 보여줄 수 변경? –

+0

@mparnisari가 추가되었습니다. – Growler

+0

.min 파일에'clickAnywhereButHereService'가없는 것 같습니다. –

답변

2

당신은 your JS is minified 있다는 사실을 고려해야 할 필요가있다.

따라서는이

.directive('clickAnywhereButHere', 
    ['$document', 'clickAnywhereButHereService', 
    function($document, clickAnywhereButHereService){ 
    //... 
    }]) 
+0

사용하기 쉽습니다. gulp ngInject' ... 의존성 배열을 수동으로 저장합니다. – charlietfl

관련 문제