动态更改 uib-tabset 属性中的值

Dynamically change value in uib-tabset attribute

在我的项目中我使用 ui.bootstrap.tabs。在 mdlg 屏幕上,选项卡应垂直堆叠显示,但在屏幕 smxs 上,我希望看到它们水平显示。我只需要将垂直属性的值设置为 true 或 false。当屏幕尺寸改变时,我匹配 mdlg 尺寸并设置 属性 vertical_tab_appearance = true 并且与 smlg 尺寸相同, 属性 具有 false 值,但 uib-tabset 指令不知道 属性 的值已更改。

 <div class="col-md-2 small hidden-print">
        <div ng-model="value">
            <uib-tabset vertical="vertical_tab_appearance" type="pills"> 
                <uib-tab></uib-tab>
            </uib-tabset> 
        </div>
</div>

这是我的屏幕尺寸事件:

 screenSize.on('md, lg', function (match) {
   if (match) {
       $scope.vertical_tab_appearance = true;
   }
  });

 screenSize.on('sm, xs', function (match) {
   if (match) {
       $scope.vertical_tab_appearance = false;
    }
  });

我可以在这里做点什么,还是在这种情况下我应该使用 ng-if

如果其他人会遇到同样的问题,这里有一个解决方案。我决定在模块配置中使用 uibTabsetDirective 装饰器,并将观察者添加到链接函数中的垂直属性。

.config(function ($provide) {
            $provide.decorator('uibTabsetDirective', function($delegate) {
                var directive, link, scope;
                directive = $delegate[0];
                link = directive.link;
                scope = directive.scope;
                scope['vertical'] = '=';
                directive.compile = function() {
                  return function Link(scope, element, attrs, ctrls) {
                    scope.$watch(attrs.vertical, function() {
                        console.log(scope.vertical);
                    });

                    return link.apply(this, arguments);
                  };
                };
                return $delegate;
            });
        });