【问题标题】:Angular JS - isolate scope bind to attribute or parent's attributeAngular JS - 隔离范围绑定到属性或父属性
【发布时间】:2015-07-09 02:00:00
【问题描述】:

我有两个自定义指令,一个是另一个的子。为简单起见,我们称它们为“外部”和“内部”。内部需要外部,并且具有这样的隔离范围。

require:'^outer',
restrict: 'EA',
scope: {
    disabled: '@'
},

outer也有一个isolate scope,还有一个属性绑定到'disabled'

我在内部链接函数中要做的是检查 disabled 的值是否为 true,如果没有设置,那么我想使用外部指令的 disabled 值,我将默认为 false。

这是否应该是自动的,例如如果未提供属性,则属性绑定将绑定到属性或父范围,或者我是否必须使用 $parent 之类的东西来访问外部范围?

【问题讨论】:

  • scope 属性创建了一个隔离范围,因此它不会单独使用父级的属性。如果值设置在那里,您可以使用link 从父控制器获取值。

标签: angularjs angularjs-directive angularjs-scope


【解决方案1】:

如果您设置scope: true,那么您的内部指令将获得一个典型地从其父范围继承的范围,因此您应该可以访问父范围上的属性。

【讨论】:

  • 好的,但是如何设置它以将内部指令的属性绑定到范围并覆盖父级的值?
  • 父级的禁用值可以绑定到其范围内的属性,子级可以修改该属性。最好创建一个共享对象(使用父控制器或链接函数)以确保子对象正在修改现有属性(而不是创建新属性)。 <outer ng-disabled="sharedData.foo"><inner/></outer> sharedData 应该可用于内部指令。更改 foo 应该禁用/启用父级。
  • 谢谢汉克,我有一种感觉,我必须找到一种方法来使用具有隔离作用域的内部指令来做到这一点。感觉应该有一种方法可以在使用 require: ^outer 时访问外部指令的范围。毕竟我可以访问它的控制器。该解决方案需要可嵌套到多个级别,例如外>内>外>内等
  • 好的,如果您可以访问控制器,那么它可以是控制器上的属性,而不是作用域。在任一指令中修改它都会影响 ng-disabled。如果您在指令 (controllerAs: 'outerController') 中定义了 controllerAs 属性,则可以绑定到该控制器上的属性。 <outer ng-disabled="outerController.isOuterDirectiveDisabled"><inner/></outer>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-22
  • 2014-07-13
  • 1970-01-01
  • 2015-05-14
  • 2012-12-27
  • 1970-01-01
  • 2015-12-07
相关资源
最近更新 更多