4

我想在调用各种 Angular UI 指令时向元素添加活动类。例如,当我调用弹出框时,我想突出显示元素(在本例中是一个按钮)。我知道我可以只添加带有表达式的 ng-click,但我想要一个更强大的解决方案。

我不确定如何修改指令,因此我能够获取目标元素并切换类。我创建了一个小提琴,我希望有人可以帮助解决这个问题。

我感谢帮助的家伙,谢谢。

4

1 回答 1

7

Angular 并不限制您定义与 ui-bootstrap 中的指令名称相同的指令。这并不意味着您覆盖它们(尽管您可以),您只是附加地应用它们。只要您不破坏它们的原始功能,您就可以执行以下操作:

app.directive("popover", function () {
  return {
    restrict: 'EA',
    priority: -1000, // Run last
    link: function (scope, element) {
      element.addClass("my-popover");
      scope.$watch('tt_isOpen', function (value) {
        if (value) {
          element.addClass("open");
        } else {
          element.removeClass("open");
        }
      });
    }
  };
});

app.directive("tooltip", function () {
  return {
    restrict: 'EA',
    priority: -1000, // Run last
    link: function (scope, element) {
      element.addClass("my-tooltip");
      scope.$watch('tt_isOpen', function (value) {
        if (value) {
          element.addClass("open");
        } else {
          element.removeClass("open");
        }
      });
    }
  };
});

然后定义样式,例如:

.my-popover.open {
    background-color: red; 
}

.my-tooltip.open {
    font-style:italic;
    color: orange;
}

不幸的是,您有点依赖原始的实现细节(tt_isOpen到底是从哪里来的)。

在这里查看。

于 2013-11-15T18:22:38.013 回答