我正在尝试创建一个指令,它将根据路径自动激活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
这一事实有关,但同样 - 我不确定如何。