为什么ng-style在同一个元素上与自定义指令一起使用时无效?
为什么ng-style在与自定义指令相同的元素上不起作用?
您的指令可能定义了一个隔离作用域:scope: { ... }
。在这种情况下,所有在该元素上定义的指令都将使用隔离作用域。因此,ng-style将在隔离作用域上查找属性myStyle
,但该属性不存在。
上图中的灰色线表示$parents,虚线表示原型继承。
作用域004是您的隔离作用域。作用域003是您的控制器作用域。ng-style将在作用域004中查找myStyle
,找不到,然后它将沿着虚线继续查找,在作用域中也找不到。
通常情况下,您不希望在同一个元素上使用创建隔离作用域的指令以及其他指令。您有几个选择:
1. 在指令中使用scope: true
而不是隔离作用域。然后,当ng-style在作用域004中查找myStyle
时找不到它,它将沿着虚线(在下图中)继续查找,并在父作用域中找到它:
2. 在您的HTML中使用ng-style="$parent.myStyle"
来访问父作用域中的myStyle
属性(即,按照第一张图片中的灰色线进行访问)。
答案非常详细,非常好!
如果Mark不是在准备一本关于Angular的书,那么你应该这样做。
您的直觉正是我遇到的问题。感谢您如此详细的答案。现在我只需要弄清楚哪种解决方案对我来说最好。我的指令表示一个可重用的“小部件”,我理解对于这样的指令来说,有一个隔离的作用域是一个好的实践。我还在考虑将我的指令包装在一个div中,并将ng-style应用于这个div。
Josh的这个答案可能会帮助您决定哪种类型的作用域适合您的指令。
如果我希望在不与控制器进行交互的情况下调用指令的样式方法,有没有好的解决方案?