我正在尝试创建一个指令,该指令将根据路由自动激活 angular-ui 选项卡。我的指令旨在添加到选项卡集中的每个选项卡元素。
我要求
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();
};
我通过传递我在链接函数中得到的范围参数来调用它,
通过查看选项卡和选项卡集的代码,我知道选项卡集期望selectedTab
成为选项卡指令的范围。
这可以从选项卡正在调用然后将范围添加到其选项卡集合的事实中tabsetCtrl.addTab(scope);
看出tabsetCtrl
。
ctrl.addTab = function addTab(tab) {
tabs.push(tab);
...
选项卡控件调用但我不知道如何到达它。我假设这与选项卡控件的范围相同,因为我的指令应用于选项卡元素。
我的问题是如何从添加到选项卡属性的我自己的指令中获得选项卡发送到 tabsetCtrl 的范围的同一实例?
笔记:
1)我曾经认为这与我为指令的 linkingFunction 获得的范围完全相同,但如果是这种情况,我不明白为什么我在selectedTab.onSelect();
说“未定义不是函数”的行中出现错误[即,我的指令范围的 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
- 我不确定究竟是如何。