我已经使用了很多指令,但是我尝试使用隔离范围来构建它们。
我很难理解如何将隔离范围与指令控制器结合使用。看来,一旦我隔离了范围,模板就无法再访问指令控制器上的范围函数。
这是一个例子:
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/