【问题标题】:AngularJS : Access to isolate scope with replace in directiveAngularJS:使用指令中的替换来访问隔离范围
【发布时间】:2014-02-04 13:02:21
【问题描述】:

如果我将替换选项设置为 true,我想知道是否有办法访问指令的范围。例如,这里是初始的 jsbin: http://jsbin.com/ABuSODub/2/edit

当您单击x 时,指令将关闭。 close() 函数是在指令自己的隔离范围内定义的。但是,如果我将 replace 设置为 true,事情就会停止工作,这是可以理解的,因为不再有指令。

可以让它工作吗?它有更好的方法。我真的不想在父控制器上设置关闭功能。还是我完全看不到的其他问题?

【问题讨论】:

  • 你的代码抛出错误TypeError: Cannot call method 'split' of undefined
  • @IlanFrumer 对不起。我已经修复了这些并更新了上面的链接。
  • 问题在于 ng-if 创建一个新的嵌套范围,因此被嵌入的元素无法正确看到父级。您可以通过使用 ng-show 删除 ng-if 进行测试,您的问题将很容易解决

标签: javascript angularjs angularjs-directive angularjs-scope


【解决方案1】:

如果您想要对单击事件执行的所有操作都设置为 open = false,那么您无需调用函数来执行此操作。考虑这个模板修订:

'<div class="alert-box {{box}}" data-ng-if="open" data-ng-init="open = false"><span data-ng-transclude></span><a href="#" class="close" data-ng-click="open = !open">&times;</a></div>',

【讨论】:

  • 是的,这将解决问题。但我认为这种开放会污染控制器的范围,并且当多个警报涉及同一范围时会导致有趣的事情。如果我关闭一个,它不会影响所有其他人吗?
  • 不应该。我在 ng-repeat(构建树视图)中使用了该策略,没有任何问题。
猜你喜欢
  • 2015-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-11
  • 1970-01-01
相关资源
最近更新 更多