angularjs: требует и использует tabsetCtrl.select
Я пытаюсь создать директиву, которая будет автоматически активировать вкладки angular-ui на основе маршрутов. Моя директива предназначена для добавления к каждому элементу вкладки в наборе вкладок.
Я требую
require:['rwActiveIfState','^tabset']
и в моей функции компиляции я возвращаю функцию связывания, которая начинается так:
return function LinkingFunction(scope, element, attributes,controllers) {
controller=controllers[0];
tabsetCtrl=controllers[1];
...
tabsetCtrl
является контроллером для tabset, как задумано.
Я хочу позвонить .select
метод tabsetCtrl
Его код выглядит так:
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, я знаю, что tabset ожидает selectedTab
быть областью действия директивы tab.
Это видно из того факта, что вкладка вызывает tabsetCtrl.addTab(scope);
и tabsetCtrl
затем добавляет область к своей коллекции вкладок.
ctrl.addTab = function addTab(tab) {
tabs.push(tab);
...
Звонит элемент управления вкладкой, но я не знаю, как его достичь. Я предполагал, что это та же область, что и у элемента управления tab, потому что моя директива применяется к элементу tab.
Мой вопрос: как мне добраться до того же экземпляра области, который отправляется в tabsetCtrl вкладкой из моей собственной директивы, добавленной в атрибут tab?
ЗАМЕТКИ:
1) Раньше я думал, что это та же область, которую я получаю для linkingFunction моей директивы, но если это так, я не понимаю, почему я получаю сообщение об ошибке в строке для selectedTab.onSelect();
говоря, что "undefined не является функцией" [то есть, что selectedTab, который является областью действия моей директивы, не имеет "onSelect", который, если я правильно понимаю, область действия для вкладки должна основываться на ее замедлении изолированной области видимости, которая выглядит как это:
scope: {
active: '=?',
heading: '@',
onSelect: '&select', //This callback is called in contentHeadingTransclude
//once it inserts the tab's content into the dom
onDeselect: '&deselect'
},
2) Возможно, это также связано с тем, что директива tab также определяется как transclude:true
но опять же - я не уверен, как именно.