【问题标题】:overriding ng-click from bootstrap从引导程序覆盖 ng-click
【发布时间】:2015-03-02 15:25:02
【问题描述】:

假设我正在自定义一个 angularjs 引导轮播并将其作为指令。我想自定义 ng-click 在每个左/右箭头上调用的当前函数,以便它在引导程序中定义的原始函数之前调用自定义函数。我知道在 ng-click 中调用多个函数可以通过

ng-click = "customFunction();originalFunctionFromBootstrap()"

但是,在角度轮播中,左右箭头是在其引导模板中定义的,我不想使用 $templatecache 修改模板。 有没有办法在我的控制器中添加新的 ng-click 而无需修改模板缓存?

编辑: 我可以使用的当前解决方法是使用

document.querySelector('.left.carousel-control').addEventListener('click', function(){...})

当然,这不是有角度的做法。另外,如果我使用 ng-touch 中的 ng-click,也不会调用它。有没有办法修改ng-click?

【问题讨论】:

  • 您考虑过使用slide.bs.carousel 事件回调吗? getbootstrap.com/javascript/#carousel-events
  • @isherwood 所以你的建议是调用自定义函数 $on(slide.bs.carousel)?
  • 对。您应该能够在幻灯片事件之前或之后添加任何自定义行为。

标签: angularjs twitter-bootstrap carousel angular-ui-bootstrap


【解决方案1】:

如果您继承指令的范围,您可以将库函数保存在变量中并用您的逻辑覆盖该函数。然后调用您保存在变量上的函数,以便一切正常。

var _superClickMethod = scope.originalFunctionFromBootstrap;
scope.originalFunctionFromBootstrap = function () {
  // custom logic
  _superClickMethod();
}

其他解决方案是将 carrusel 引导插件包装在您的指令中。我推荐最后一个选项。

【讨论】:

  • 我将旋转木马包裹在我的指令中。我创建了一个基本上是自定义轮播的新指令。但是如何自定义 ngclick?对不起,我还是不明白
  • 我的意思是引导旋转木马。不是 angular-bootstrap 旋转木马
  • 啊,我明白了,目前我有 angular-bootstrap 轮播。而且我没有继承指令的范围,所以当我尝试保存库函数 scope.originalFunctionFromBootstrap 时,它是未定义的
  • 你能在同一个元素中添加你的指令和 angular-bootstrap 指令吗?我认为这可以解决继承问题。但是您必须在指令中添加终端属性,以便它加载最后一个。
【解决方案2】:

我最终做的是:

document.querySelector('.left.carousel-control').setAttribute('ng-click', 'customFunction()');
$compile(document.querySelector('.left.carousel-control'))(scope);

这解决了我的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-06
    相关资源
    最近更新 更多