Angular:范围变量与函数

Ili*_*ski 7 data-binding angularjs

Angular中更好的东西 - 绑定到变量或函数.特别是:

  • 由于摘要调用或为函数创建的其他监视,是否会导致性能下降?
  • 对于范围功能应该和不应该做什么有什么建议吗?

两个选项的示例:

<!-- With function -->
<button ng-disabled="noDataFoo()">Add</button>

<!-- With variable -->
<button ng-disabled="noDataFlag">Add</button>
Run Code Online (Sandbox Code Playgroud)

支持控制器:

app.controller('sample', function($scope, $http) {
    $scope.noDataFlag = true;

    $scope.noDataFoo = function () {
        return !$scope.data;
    };

    $http('/api/getdata').success(function(data) {
        $scope.data = data;
        $scope.noDataFlag = false;
    };
});
Run Code Online (Sandbox Code Playgroud)

Ili*_*ski 2

我做了一些测试,统计了不同情况下该函数被调用的次数。它发生时,该函数被调用的次数与它具有绑定的次数有关,有时是次数的两倍,并且它似乎在每次外部活动之后发生,例如页面重新加载或按钮单击或 AJAX 调用。

简而言之,如果您在 HTML 中使用了<button ng-disabled="noDataFoo()">then {{noDataFoo()}},则该函数将在页面加载时被调用 4 次,如果某些$http服务带来数据,则将调用另外 2 或 4 次,如果单击其他某个按钮,则将调用另外 2 或 4 次。根据实验,如果不改变则为 2 noDataFoo,如果改变则为 4。顺便说一句,这同样适用于点击另一个控制器。

我的结论是:绑定快速函数就可以了。对于较长的绑定,最好保持较小的绑定数量。对于更长的时间,更明智的做法是缓存结果并处理“手动”缓存更新。