Ng-if:使用普通表达式而不是函数调用,有什么不同吗?

Ng-if: using plain expression instead of function call, does it make a difference?

我找不到答案所以我在这里提出来。

如果我使用

,资源或性能会有所不同吗?
$scope.isAllowed = true;
<div ng-if="isAllowed"></div>

而不是

$scope.isAllowed = function() {
    return true;
};
<div ng-if="isAllowed()"></div>

我知道如果我使用第一个选项,Angular2+ 会有优势,但这是否也适用于 AngularJs? 对于一次性绑定,我可以在 the expression guide 处找到 {{::isAllowed}},但我认为这在这种情况下不起作用。

我还发现 ng-if 的绑定使其成为观察者,归结为 $scope.$watch 函数。但这并不能解决问题。

有人对这个话题有更深入的了解吗?

没有。两者都会创建一个观察者。 (我的意思是有些东西快一点,但这可以忽略不计。)

当你关心代码风格和代码可维护性时,你会看到差异。

例如当您的页面变慢时,您想知道 - 怎么了?然后你打开模板:

<div ng-if="isAllowed"></div>这只是一个观察者

<div ng-if="isAllowed()"></div> 这是...您需要打开控制器文件才能看到它是什么

现在假设您有 50 个这样的函数,其中一些函数调用另一个函数,它们调用工厂中的函数等。可能真的很难理解到底是什么让页面变慢了。

所以短表达式的一般规则应该是——在 ng-if、ng-show ng-bind、{{}} 等中没有函数。 如果你有像 ng-if="conditionA && (conditionB || conditionC) || (conditionD && !conditionQ)" 这样的东西,你可能想把它提取到一个函数中以便于阅读和测试。