我想谈谈在视图中使用常量的性能;有更好的方法吗?(请耐心等待,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>
不要太担心性能(作为用户,你不会感觉到差异)。如果你保持你的结构简单和模块化,它更容易调试、扩展和修复错误。
希望这能有所帮助。