我正在尝试简化代码的if语句。
目前,我有这3个丑陋的if语句,我正在寻找一种方法来分配vm.model
属性的名称,该属性基于当前对vm.model.status
正确的属性。
说vm.model.received === true
,我想写些类似的东西
vm.model.status = //vm.model[name] << if vm.model.received/issued/cancelled true
在这种情况下,有可能写出更好看的代码而不是重复自己3次吗?
angular.module('app',[])
.controller('mainCtrl', function() {
var vm = this;
vm.model = {
received: true,
issued: false,
cancelled: false,
anotherProp: 'abc',
anotherProp2: 'def'
}
if(vm.model.received) {
vm.model.status = 'received';
} else if(vm.model.issued) {
vm.model.status = 'issued';
} else if(vm.model.cancelled) {
vm.model.status = 'cancelled';
}
})
<html ng-app="app">
<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.7.5/angular.min.js"></script>
</head>
<body>
<div ng-controller="mainCtrl as vm">
<form>
<input type="radio" ng-model="vm.model.status" value="received">Received
<input type="radio" ng-model="vm.model.status" value="issued">Issued
<input type="radio" ng-model="vm.model.status" value="cancelled">Cancelled
</form>
</div>
</body>
</html>
答案 0 :(得分:3)
您可以将键/值放入数组中并找到值。您可能还需要一个默认值。
vm.model.status = ['received', 'issued', 'cancelled'].find(k => vm.model[k]);