添加到作用域的常量的性能



我想谈谈在视图中使用常量的性能;有更好的方法吗?(请耐心等待,Angular新手)

我正在将常量"fieldConst"作为依赖项注入控制器,如下所示:

(function() {
'use strict';
angular
    .module('myApp')
    .controller('jobsCtrl', ['$scope', 'jobsService', 'fieldConst', jobsCtrl]);
    function jobsCtrl($scope, jobsService, fieldConst) {
        $scope.fieldConst = fieldConst;
        // get Jobs
        var state = jobsService.getState();
        $scope.jobs = state.jobs;
    }
})();

在我看来,我正在使用这些,就像这样:

... 
<a ng-href="#" ng-repeat="job in jobs.records">
    <h5>{{ job[fieldConst.JOBNUMBER] }} {{ job[fieldConst.JOBTITLE] }}</h5>
    <small ng-switch on="job['isActive']">
...

这是否比使用的性能差得多

<h5>{{ job.JobNumber] }} {{ job.jobTitle] }}</h5>

我在整个应用程序中使用了大量字段/属性,数据库中定义的这些字段/属性的名称可能会更改;因此希望使用常数

性能相同。向$scope添加变量不会创建观察程序。创建观察程序的是每个{{}}、ng if、ng show等。每个{{}}都有一个表达式,该表达式需要在摘要循环运行时进行评估,Angular将检查该表达式是否已更改以更新视图。因此,在您的情况下,问题是job.JobNumber是否比job[fieldConst.JOBNUMBER]更具性能。

所以我最后的答案是忘掉它。完全一样。

保持视图简单,否则它可能会成为难以调试的黑洞。这就是为什么我个人建议在您的场景中使用job.JobNumber。但你已经有了jobService服务,它应该会退还你所需要的一切。只需通过方法getNumber()getTitle()来扩展此服务。如果您担心在角度之外更改数据后更新视图,可以使用视图中的函数。

控制器:

$scope.getTitle = function(){ return jobsService.getTitle(); };
$scope.getNumber = function(){ return jobsService.getNumber(); };
$scope.jobs = jobService.getState().jobs;

视图:

<h5>{{jobsCtrl.getTitle()}} {{jobsCtrl.getNumber()}}</h5>

不要太担心性能(作为用户,你不会感觉到差异)。如果你保持你的结构简单和模块化,它更容易调试、扩展和修复错误。

希望这能有所帮助。

最新更新