我已经经常使用指令,但我正在尝试使用隔离范围来构建它们。
我很难理解隔离范围如何与指令 Controller 结合使用。似乎一旦我隔离了范围,模板就无法再访问指令 Controller 上的范围函数。
这是一个例子:
http://plnkr.co/edit/NWa7nZzjoncKEXwuvSKo?p=preview
我已经阅读过有关使用作用域绑定(bind)的内容,但似乎它应该用于与“父”作用域交互,并且我认为嵌入式 Controller 将成为隔离作用域的一部分。
最佳答案
这对于新人来说是一个很难的话题。我在这里做个简历,方便大家理解。
当你做类似的事情时:
<my-directive>
<button ng-click="doSomething()">Do Something</button>
</my-directive>
你的第一个想法是 <my-directive>
里面的所有东西,在本例中为 <button>
是指令的一部分。这不是真的。
里面是什么,再次,<button>
称为 transcluded html
。那transcluded html
有一个新的作用域,它无法访问该指令的隔离作用域,实际上它们是 sibling 。
具体来说,有一个 Controller 的作用域,并且从那里有一个独立的作用域和一个用于嵌入的 html 的新作用域。
因此,由于嵌入的 html 无法访问隔离范围,因此 ng-click
根本不会开火。
有解决方法。
所以在这种情况下,我重复一遍,doSomething
存在于隔离范围内,并且该按钮正在查看 transcluded html
的新范围及其父级( Controller 的范围),但它不存在。
sh3nan1gans 给你的解决方案是有效的,但我个人不会这样做。
它是如何工作的?由于它创建了与 Controller 作用域的双向绑定(bind),因此它在隔离的函数上创建新函数,然后也在父函数上创建它。然后按钮将在该父作用域中找到该函数并运行它。
如果您想了解更多信息(包括解决方法),请查看 here
关于javascript - 一起使用隔离范围和嵌入式指令 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22921077/