【发布时间】:2021-03-10 22:06:52
【问题描述】:
我想在 java 脚本文件中访问相同的变量属性,但由于属性太多,代码看起来有点难看。我有下一个代码:
$scope.invoice = new Invoice();
$scope.operations = {
editingLine: {},
isNewLine: false,
isEditOpen: false
};
$scope.modify = function (invoiceLine) {
if ($scope.operations.isEditOpen) return;
let originalLine = $scope.invoice.invoiceLines.find(line => line.id = invoiceLine.id);
tempLine = angular.copy(originalLine);
$scope.operations.editingLine[invoiceLine.id] = true;
$scope.operations.isEditOpen = true;
};
有什么方法可以更简洁地访问设置在对象invoice 上的属性invoiceLine 或设置在对象operations 上的属性isEditOpen?我的文件中有很多重复的代码,我想找到一种更简洁的方法来访问这样的属性。
我知道我可以定义一个变量 var operations = $scope.operations 并在我需要这个值时访问属性 operations.isEditOpen 但我仍然想要更简单的东西,因为我不想为来自的所有对象创建变量范围。
有什么方法可以创建一个带有两个params (objectFromScope, neededProperty) 的function,它可以从范围上设置的变量返回所需的属性值?或者当我想从作用域访问对象属性时,有没有更好的方法来减少这么多代码?
PS:我也可以这样做:
let editingLine = $scope.operations.editingLine;
let isNewLine = $scope.operations.isNewLine;
let isEditOpen = $scope.operations.isEditOpen;
$scope.modify = function (invoiceLine) {
if (isEditOpen) return;
let originalLine = invoiceLines.find(line => line.id = invoiceLine.id);
tempLine = angular.copy(originalLine);
editingLine[invoiceLine.id] = true;
isEditOpen = true;
};
但这是一个好方法吗?
【问题讨论】:
-
“因为我不想为范围内的所有对象创建变量” - 为什么不呢?
-
顺便说一句,回复:
let editingLine = $scope.operations.editingLine;- 如果该代码在全局范围内,那么它只会复制一次editingLine。这不是价值的实时视图。 -
"有什么方法可以访问设置在对象
invoice上的属性invoiceLine" - 你的意思是invoiceLines,而不是invoiceLine,对吗?
标签: javascript angularjs object properties nested-properties