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 но опять же - я не уверен, как именно.

0 ответов

Другие вопросы по тегам