将一组名称相似的属性设置为false

时间:2018-10-19 17:30:55

标签: javascript angularjs

在AngularJS项目中,视图模型具有几个与导航相关联的属性,这些属性以单词“ show”开头。有一个函数可以在调用时将其设置为false:

var hideComponents = function() {
 vm.showAddress = false;
 vm.showEvent = false;
 vm.showAccount = false;
 //several others not displayed here
}

是否可以使用通配符将以“ show”开头的所有属性设置为false?我在想这样的事情:

vm['show'*] = false;

但该语法不正确。

2 个答案:

答案 0 :(得分:3)

您可以这样做:

Object.keys(vm).forEach(key => {
  if (key.startsWith('show')) {
    vm[key] = false;
  }
})

答案 1 :(得分:0)

以下是使用对象或数组的可能解决方案:

var vm.firstConfig = {
    showAddress: false,
    showEvent: false,
    showAccount: false
};

var vm.secondConfig = {
    showMenu: false,
    showThis: false,
    showThat: false
};

$scope.showHideComponents = function(value) {
    for (var i in vm.firstConfig) {
        vm.firstConfig[i] = value;
    }

    for (var i in vm.secondConfig) {
        vm.secondConfig[i] = !value;
    }
}

如果您是通过HTML调用的,请执行以下操作:

<input type="checkbox" ng-model="toggle" ng-click="showHideComponents(toggle)" />

或者,如果您只想将它​​们放在一行上:

vm.showAddress = vm.showEvent = vm.showAccount = false;

参考:Easily set multiple variables to false or true