javascript - 一起使用隔离范围和嵌入式指令 Controller

标签 javascript angularjs angularjs-directive angularjs-scope

我已经经常使用指令,但我正在尝试使用隔离范围来构建它们。

我很难理解隔离范围如何与指令 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/

相关文章:

javascript - ExtJS GridPanel 向查询字符串添加另一个参数

javascript - 在 sequelize 中,如何定义 X 属于 A 或 B 的关系?

javascript - Angular 1.5 : Access bindToController properties inside controller

AngularJs,指令中未定义 $scope.variable

javascript - 如何有条件地在 ng 样式中应用动态值?

javascript - 指令内容在包装 html 之前呈现

javascript - 谷歌分析凭证

javascript - parseInt()和八进制-哪些浏览器支持它?

javascript - 如何在 Controller 中定义来自另一个文件的变量?

javascript - Angular.js,如何检查 Controller 中的身份验证服务