我已经使用了很多指令,但是我尝试使用隔离范围来构建它们。

我很难理解如何将隔离范围与指令控制器结合使用。看来,一旦我隔离了范围,模板就无法再访问指令控制器上的范围函数。

这是一个例子:

http://plnkr.co/edit/NWa7nZzjoncKEXwuvSKo?p=preview

我已经阅读了有关使用范围绑定的信息,但似乎应该用于与“父”范围进行交互,而且我认为嵌入式控制器将成为隔离范围的一部分。

最佳答案

对于新手来说这是一个很难的话题。我将在这里做一份简历,以使您理解它。

当您执行以下操作时:

<my-directive>
  <button ng-click="doSomething()">Do Something</button>
</my-directive>


您首先想到的是<my-directive>中的所有内容,在这种情况下,<button>是指令的一部分。那是不对的。

里面的<button>再次称为transcluded html。该transcluded html具有新的作用域,它不能访问指令的隔离作用域,实际上它们是同级的。

具体来说,有一个控制器的作用域,并且从那里有一个隔离的作用域和一个新的作用域,用于嵌入的html。

因此,由于嵌入的html无法访问隔离范围,因此ng-click根本不会触发。

有解决方法。

因此,在这种情况下,我重复一遍,doSomething存在于隔离的作用域中,并且该按钮正在查看transcluded html的新作用域及其父项(控制器的作用域),并且它不存在。

sh3nan1gans给您的解决方案正在工作,但我个人不会这样做。

它是如何工作的?因为它创建了与控制器作用域的双向绑定,所以它在隔离的对象上创建了新函数,然后还在父对象上创建了新函数。然后,该按钮将在该父作用域中找到该函数,然后运行它。

如果需要更多信息(包括解决方法),请选中here

关于javascript - 一起使用隔离作用域和嵌入式指令 Controller ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22921077/

10-13 01:32