我能否以声明方式基于另一个变量设置一个变量的值?

时间:2014-09-30 19:46:28

标签: angularjs

让我们说我的范围,我有布尔值:

$scope.isChecked = true;
$scope.selected = false;

在我的HTML中我有

<input type="checkbox" ng-model="isChecked" ng-show="selected = isChecked"/>

ng-show中的代码是否有效?我可以根据isChecked更新所选变量吗?在这种情况下,selected将设置为true。

ng-show不是最好的指令吗?如果更新了isChecked,是否有更新所选值的指令?

<table class="table table-condensed table-striped table-hover" ng-show="activeTab=='inbox'">
     <tbody>
       <tr ng-repeat="email in emails">
            <td>
             <input type="checkbox" ng-checked="master" 
                                    ng-model="email.isChecked" 
                                    ng-change="selected = email.isChecked"/>
           </td>
</tr>
</table>

(function () {

var app = window.angular.module("mail", []);

app.controller("emailController", ["$scope", "emailService", function emailController($scope, emailService) {


    $scope.selected = false;

    $scope.getEmails = function () {
        emailService.getEmails().then(function (data) {
            $scope.emails = data;
        });
    };

调用getEmails之后,例如$ scope.emails [0] .email有一个isChecked属性,如果检查了任何电子邮件,我想将$ scope.selected设置为true,但如果没有检查所有,然后我想将$ scope.selected设置为false。我想知道是否可以采取循环方式,但如果我收到大量电子邮件,可能需要一段时间

1 个答案:

答案 0 :(得分:0)

正如您编写的代码

ng-show="selected = isChecked"
显然它会被执行; 这就像

$scope.selected = $scope.isChecked

在具体情况下,我建议你 仅当isCheckedfalse时执行循环。

像:

ng-change="checkedChanged(email.isChecked)"

$scope.checkedChanged = function(chk) {
    if(chk) {
      $scope.selected = true;
    } else {
      var checkedFlag=false;
      //loop here

      $scope.selected = checkedFlag;
    }

}