我希望有人能够提供一些我现在非常缺乏的Angular洞察。ngClass什么时候评估函数/如何在自定义指令中模仿这个
ngClass允许您根据某些功能添加/删除类。例如,如果我写:
<div ng-class="{'some-class' : myFunction()}"> </div>
然后.some-class将被添加/删除,如果myFunction()评估为真或假。特别好的是,我不需要担心这个函数会在我的代码的其他地方被调用,以便表达式进行评估。 ngClass只是保证类与myFunction()的当前返回值保持最新。
所以我的第一个问题是,ngClass如何确定何时检查myFunction()的返回值是否发生了变化?它是否检查每个摘要循环的myFunction()?据推测,某件腕表上设置了手表,但正在观看的是什么?我尝试阅读ngClass的代码,但我没有足够的背景知识来掌握它的实现方式。
我想知道这个的原因是我想在自定义指令中模仿这种行为。所以在我的应用程序中,我有类似上面的ngClass。 myFunction()位于我的页面的主控制器上,但它执行了一堆直接的DOM操作,所以它不应该在那里。我想将myFunction()从控制器中移出并将其移动到自定义指令中,但是如果我这样做了,那么我需要一些方法来重复检查该函数以设置类。我希望能够做到这样的事情:
app.directive('myDirective', function() {
return {
restrict: 'A,
link: function (scope, elem, attrs) {
function myFunction() {//...}
// I want this to be checked at the
// same frequency that ngClass is checked
// Is that each digest cycle?
if (myFunction()) {
elem.addClass('some-class');
} else {
elem.removeClass('some-class');
}
}
}
显然这是行不通的。它只会在指令链接时运行。那么我怎么能看myFunction()进行更改呢?
你为什么不使用'NG-如果'with statement ='myFunction()' – Kai 2014-10-10 19:32:56
我不认为我能看到你在做什么,你能详细说明一下吗? – Sanborn 2014-10-10 20:03:17
@Sanborn你能解决这个问题吗? – JME 2014-10-17 01:03:59