angularjs:要求和使用tabsetCtrl.select

时间:2014-09-29 09:43:27

标签: angularjs angularjs-directive angularjs-scope angular-ui-tabset

我正在尝试创建一个指令,它将根据路径自动激活angular-ui标签。 我的指令旨在添加到tabset中的每个tab元素。

我要求

require:['rwActiveIfState','^tabset']

在我的编译函数中,我将返回一个链接函数,其开头如下:

return function LinkingFunction(scope, element, attributes,controllers) {
      controller=controllers[0];
      tabsetCtrl=controllers[1];
...

tabsetCtrl是标签集的控制器。

我想调用.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();
  };

我通过传递我在链接函数中获得的scope参数来调用它,

从查看tab和tabset的代码我知道tabset期望selectedTab成为tab指令的范围。

这可以从标签调用tabsetCtrl.addTab(scope);的事实看出,然后tabsetCtrl将范围添加到其标签集合中。

  ctrl.addTab = function addTab(tab) {
    tabs.push(tab);
...

标签控件调用,但我不起诉如何到达它。 我假设这与tab控件的范围相同,因为我的指令应用于tab元素。

我的问题是如何通过添加到tab属性的我自己的指令中的选项卡获取发送到tabsetCtrl的作用域的同一实例?

注意:

1)我曾经认为这与我的指令的linksFunction的范围完全相同但是如果是这种情况我不明白为什么我在selectedTab.onSelect();的行中出现错误说“undefined不是一个函数”[即这个作为我的指令范围的selectedTab没有“onSelect”,如果我理解正确,该选项卡的范围应该基于其 isolated 范围的减速度,如下所示:< / p>

   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 个答案:

没有答案