2014-07-13 2 views
0

제어문 \ here을 사용하고 있습니다. 그들에 클릭 할 때 부모의 선택 기능을 실행할 수외부 컨트롤러에서 탭을 선택하는 방법

.controller('TabsetController', ['$scope', function TabsetCtrl($scope) { 
    var ctrl = this, 
     tabs = ctrl.tabs = $scope.tabs = []; 

    ctrl.select = function(selectedTab) { 
    angular.forEach(tabs, function(tab) { 
     if (tab.active && tab !== selectedTab) { 
     tab.active = false; 
     tab.onDeselect(); 
     } 
    }); 
    selectedTab.active = true; 
    selectedTab.onSelect(); 
    }; 

TabSet를 자식 탭 컨트롤 (하위 요소) : 컨트롤은 그 자체가 활성 탭을 설정 컨트롤러를 만듭니다.

.directive('tab', ['$parse', function($parse) { 
    return { 
    require: '^tabset', 
    scope: { 
     onSelect: '&select', 

나는 첫 번째 탭이 활성화 설정 TabsetControllerselect 기능을 실행하는 데 필요한 DOM 위쪽으로 내 사용자 정의 컨트롤러를 가지고있다. 나는 이벤트 브로드 캐스팅을 사용할 수 있다고 읽었지만 TabsetController을 수정하여 이벤트 리스너를 바인드 할 수 없으므로 이것이 가능한 옵션이 아닌 것 같습니다. 어떤 제안?

편집 :

더 나은 이해를 위해 Plunker를 참조하십시오 - here.

+0

설정이 데모와 다른 이유가 무엇인지 명확하지 않습니다. 데모는 이미 로컬 컨트롤러 수준에서 탭을 전환하는 방법을 보여줍니다. 문제가 무엇인지 더 자세히 보여주기 위해 멍청한 예를 수정할 수 있습니까? – charlietfl

+0

[여기] (http://plnkr.co/edit/RClxbaGFQ1Y4Jznd0XDw) 나는 Plunk를 만들었습니다. 내가해야할 일은'div.words' 컨테이너 안에 단어가있을 때 항상 첫 번째 탭을 선택하는 것입니다. 현재 두 번째 탭이 선택되고'div.words '안에 단어가 클릭되면 두 번째 탭이 활성 상태로 유지됩니다. –

+0

이것이 무엇입니까 찾고 계십니까? http://plnkr.co/edit/qJcMXVRQvBhQCMkvZsM3?p=preview – kihu

답변

0

"상위"컨트롤러 내에서 범위 특성을 선언 할 수 있으며 하위 컨트롤러에서 액세스 할 수 있습니다. AngularJS - Access to child scope은 MainController에 scope.tabs을 MainController는 부모 요소에 설정되어있는 동안 TabsetController이 아이 DOM 요소에 설정되어 있기 때문에

, 사용자가 정의 할 수 있으며 $ 조작, 그리고 볼과 TabsetController에서 해석하여됩니다 참조하십시오.

+0

고마워요.하지만'tabs' 속성은 다음 줄로 덮어 쓰게됩니다 :'tabs = ctrl.tabs = $ scope.tabs = [];'. 이 줄은'ui.bootstrap.js' 파일 ('https://github.com/angular-ui/bootstrap/blob/master/src/tabs/tabs.js) '의'TabsetController' 정의에서 볼 수 있습니다. –

+0

또 다른 별도의 질문 [여기] (http://stackoverflow.com/questions/24733416/what-happens-to-scope-property-if-two-controllers-that-apply-to-one-html-element)을 만들었습니다. . –