2013-12-09 1 views
0

jQuery 플러그인을 지시문으로 만들었습니다. jQuery 플러그인으로 지시문을 호출하고 플러그인에서 공용 메소드 호출

app.directive('bxSlider', function($timeout) 
{ 
    return { 
     restrict: 'A', 
     link: function(scope, element, attrs) 
     { 
      $timeout(function(){element.bxSlider(scope.$eval(attrs.bxSlider))},1); 
     } 
    } 
}); 

내 컨트롤러에서 (클릭 기능을 통해), I는 플러그인에 공개 메소드를 호출하고 싶습니다,하지만 할 방법을 모르겠습니다. 변수에 지시문을 설정하고 컨트롤러에서 그런 식으로 호출하려고 시도했지만 오류가 발생했습니다 ... 메서드가 없습니다 ...

올바른 방법은 무엇입니까?

+0

지시어의 링크 기능에 클릭 수신기를 바인딩하지 않는 이유는 무엇입니까? DOM에서 버튼의 위치뿐만 아니라 호출 할 정확한 함수를 지정할 수 있다면 쉽게 도움이 될 것입니다. – Jonathan

+0

@Jonathan 음, jQuery 플러그인에는 reloadSlider()라는 공용 함수가 있습니다. 버튼을 클릭하면 해당 함수를 호출하려고합니다. 그것은 단순히 '이고 changeItems() 함수는 내 컨트롤러에 있습니다. – Ronnie

+0

plunker 또는 jsfiddle.net에서 데모를 만듭니다. 일반적으로 플러그인 API에서 작업하지만 플러그인 설정 옵션은 없습니다. 또한 지시문의 링크 콜백 내에 메소드를 추가 할 수도 있습니다 – charlietfl

답변

0

이벤트를 브로드 캐스팅하여 플러그인 메소드를 트리거 할 수 있습니다.

app.directive('bxSlider', function($timeout) 
{ 
    return { 
     restrict: 'A', 
     link: function(scope, element, attrs) 
     { 
      var slider; 
      $timeout(function() { 
       slider = element.bxSlider(scope.$eval(attrs.bxSlider)); 
      }, 1); 

      scope.$on('reload-slider', function() { 
       slider.reloadSlider(); 
      }); 
     } 
    } 
}); 

컨트롤러 기능에서 $scope.$broadcast('reload-slider')을 사용합니다.

관련 문제