【问题标题】:how can I select a tab from outside controller如何从外部控制器中选择一个选项卡
【发布时间】:2014-09-03 18:25:16
【问题描述】:

我正在使用Tabs (ui.bootstrap.tabs) 控制\指令描述here。该控件创建它自己的控制器来设置活动选项卡:

.controller('TabsetController', ['$scope', function TabsetCtrl($scope) {
  var ctrl = this,
      tabs = ctrl.tabs = $scope.tabs = [];

  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 子选项卡控件(子元素)在点击时可以触发父级的选择功能。

.directive('tab', ['$parse', function($parse) {
  return {
    require: '^tabset',
    scope: {
      onSelect: '&select',

我有我的自定义控制器向上的 DOM 需要触发 TabsetController 上的 select 函数以设置第一个选项卡处于活动状态。我读过我可以使用事件广播,但我不能修改TabsetController 来绑定事件监听器,所以这似乎不是一个可行的选择。有什么建议吗?

编辑:

请参阅 Plunker 以获得更好的理解 - here

【问题讨论】:

  • 不清楚是什么让您的设置与演示不同。演示已经展示了如何在本地控制器级别切换选项卡。您能否修改 plunker 示例以显示更多关于您的问题的信息?
  • Here 我已经创建了 Plunk。我需要做的是,只要在div.words 容器中单击某个单词,就始终选择第一个选项卡。目前,如果选择了第二个选项卡并且点击了div.words 中的某个单词,则第二个选项卡保持活动状态。
  • 谢谢,但我不明白它是如何工作的。指令定义需要包含此行tabs = ctrl.tabs = $scope.tabs = []; 的控制器。那么tabs 属性如何在MainControllerTabsetController 之间共享,这是tabset 指令所要求的?
  • 嘿,我在答案中添加了解释。我没有看到你在引导演示中提到的那一行,你从哪里得到的?

标签: angularjs angular-bootstrap


【解决方案1】:

您可以在“父”控制器中声明范围属性,并且可以在子控制器中访问它。 见:AngularJS - Access to child scope

由于 TabsetController 设置在子 DOM 元素上,而 MainController 设置在父元素上,您可以在 MainController 中定义和操作 $scope.tabs,它会在 TabsetController 中看到和解释。

【讨论】:

  • 谢谢,但tabs 属性被以下行覆盖:tabs = ctrl.tabs = $scope.tabs = [];。您可以在ui.bootstrap.js 文件here 内的TabsetController 定义中看到这一行。
  • 我创建了另一个单独的问题here
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多