javascript - Angular JS - 更改一个作用域状态并将其余作用域设置为 false 的最佳方法

标签 javascript angularjs

假设我的 View 中有 4 个字段,我想在单击时打开/关闭这些字段,同时关闭其他三个字段。

<div class="square red"></div>
<div class="square blue"></div>
<div class="square yellow"></div>
<div class="square green"></div>

为了实现这一目标,我所做的是添加一个 ng-class,每当在该字段中完成 ng-click 时就会触发该类。所以 View 会是这样的:

<div class="square red" ng-class="{'open':redSquare == true}" ng-click="clickRedSquare()"></div>
<div class="square blue" ng-class="{'open':blueSquare == true}" ng-click="clickBlueSquare()"></div>
<div class="square yellow" ng-class="{'open':yellowSquare == true}" ng-click="clickYellowSquare()"></div>
<div class="square green" ng-class="{'open':greenSquare == true}" ng-click="clickGreenSquare()"></div>

在我的 Controller 中我会有这样的东西:

$scope.redSquare = true;
$scope.clickRedSquare = function() {
    $scope.redSquare = !$scope.redSquare;
    $scope.blueSquare = false;
    $scope.greenSquare = false;
    $scope.yellowSquare = false;
};
$scope.clickBlueSquare = function() {
    $scope.redSquare = false;
    $scope.blueSquare = !$scope.blueSquare;
    $scope.greenSquare = false;
    $scope.yellowSquare = false;
};
$scope.clickGreenSquare = function() {
    $scope.redSquare = false;
    $scope.blueSquare = false;
    $scope.greenSquare = !$scope.greenSquare;
    $scope.yellowSquare = false;
};
$scope.clickYellowSquare = function() {
    $scope.redSquare = false;
    $scope.blueSquare = false;
    $scope.greenSquare = false;
    $scope.yellowSquare = !$scope.yellowSquare;
};

我想问 Angular 中最好的方法是什么(如果有的话),以避免重复的代码。你可以看到工作plunkr here 。提前致谢!

最佳答案

如果你想为每个方 block 保留单独的变量,你可以这样做:

$scope.clickSquare = function(name) {
    ["redSquare",
     "blueSquare",
     "greenSquare",
     "yellowSquare"].forEach(function(e) {
        $scope[e] = (e === name) ? !$scope[e] : false;
     });
}

然后只需使用参数调用此方法ng-click="clickSquare('redSquare')"

Updated Plunker

关于javascript - Angular JS - 更改一个作用域状态并将其余作用域设置为 false 的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45402368/

相关文章:

post - 带有 ng-option 的 Angular 选择在发布表单时发送索引而不是值

javascript - 异步/等待与 SubtleCrypto 结合使用

javascript - 如何通过电子邮件发送动态 html 代码块?

php - 隐藏下载网址

javascript - Visual Studio 2008 jQuery IntelliSense偶尔失败,重新启动VS修复

angularjs - 将 JSP 与 AngularJS 集成,这是现实世界中的一个问题吗?

javascript - 如何在 AngularJS 中按对象中的特定属性进行过滤?

javascript - 从 CKEditor 中删除状态栏

javascript - 删除字符串周围的括号并将内容放入新对象

javascript - 使用 ui-router 的多个参数