如果某个值等于另一个值,则将ng-model分配给复选框

3

我在Angular控制器中有一个用户对象。我也有一个带有每个对应ID的Account对象数组。

在用户中,我有一个字段“default_account”,我想在其中放入默认帐户的ID。所以,用户可以拥有许多帐户,但只能有一个默认帐户。当我进入帐户选项时,那里有一个复选框,负责将帐户设置/取消为默认值。

现在,我想根据其在用户中的默认情况设置复选框的开/关状态。并且,在复选框更改时,我还需要相应地更改User对象中的default_account字段。这让我感到非常困惑,我该如何做才行。

非常感谢您提供的任何建议!


嗨,Sergey,我在我的回答中给了你一个可工作的fiddle。Dewd - dewd
1
如果只有一个帐户可以成为默认帐户,您可能想要将复选框替换为单选按钮。 - callmekatootie
3个回答

1
非常接近(没有文本):
HTML:
       <div ng-repeat="account in accounts">
           <input type="checkbox" ng-checked="account == user.default_acount" 
                  ng-click="SelectAssDefault(account )" />
        </div>

js:

function MyCtrl($scope) {

  $scope.user = { name: 'user', default_acount: null};
  $scope.accounts = [{  }, {  }, ...];

  $scope.SelectAssDefault = function (account) {
      $scope.user.default_acount = account;
  };
}

编辑:一个可用的示例:http://jsfiddle.net/ev62U/120/


account == user.default_account - $scope.accounts 是一个对象数组。该对象将具有许多属性。在这里理想的解决方案是仅在用户模型中存储帐户号码并将其与现有的帐户号码进行比较。不需要比较整个帐户信息。因此,解决方案应更多地是 account.account_number == user.default_acount,而不是比较整个帐户对象(甚至将整个帐户对象存储到用户模型中)。 - callmekatootie
@callmekatootie,好的,这取决于您定义设计和逻辑的方式。问题并不完全是关于这个的。 - Artur Udod

0

这是我的解决方案,对我来说完美地运作了!

<tbody ng-repeat="account in accounts">
          <tr>
            <td ><a ng-click="getloandetails(account.idAccount)">{{account.accountName}}</a></td>
            <td>$ {{account.currentBalance}}</td>
          </tr>
</tbody>

在 Angular 端只需要这样做:

$scope.getloandetails = function(accountId) {
    alert('Gettring details for the accountId: ' + accountId);
};

0
如果您想基于变量将复选框设置为true,可以在输入标记中设置ng-checked="variable"
如果变量为true,则框将被选中。如果是false,它将不会选中。或者,表达式也可以工作,例如ng-checked="1===1"将求值为true。
如果您想要根据用户单击复选框来更改其他内容,请在输入标记中设置ng-click="someCtrlFunction()"。这将调用控制器中的函数。如果您已绑定到复选框,您可以从控制器中查找复选框的值。
这是一个fiddle:http://jsfiddle.net/E8LBV/10/,这是代码:
HTML
<div ng-app="App">
<div ng-controller="AppCtrl">
    <ul>
        <li ng-repeat="user in users">{{user.name}}
            <ul>
                <li ng-repeat="account in user.accounts">
                    <input type="checkbox" ng-model="checked" ng-checked="account == user.default" ng-click="changeDefault(user.id,account,checked)">{{account}}</input>
                </li>
                <ul/>
        </li>
    </ul>
</div>
</div>

JS

            var app = angular.module('App', []);

            app.service('Users', function () {
                var Users = {};

                Users.data = [{
                    'id': 1,
                        'name': 'jon',
                        'default': null
                }, {
                    'id': 2,
                        'name': 'pete',
                        'default': null
                }];

                return Users;

            });

            app.service('Accounts', function () {
                var Accounts = {};

                Accounts.data = [{
                    'user': 1,
                        'ac': 123456
                }, {
                    'user': 2,
                        'ac': 456832
                }, {
                    'user': 2,
                        'ac': 345632
                }, {
                    'user': 1,
                        'ac': 677456
                }];

                return Accounts;

            });

            app.controller('AppCtrl', function ($scope, Users, Accounts) {
                $scope.users = Users.data;

                //attach accounts to user                
                for (i = 0; i < $scope.users.length; i++) {
                    $scope.users[i].accounts = [];
                    for (ii = 0; ii < Accounts.data.length; ii++) {
                        if (Accounts.data[ii].user == $scope.users[i].id) {
                            $scope.users[i].accounts.push(Accounts.data[ii].ac);
                        }
                    }
                }

                    //function to change the default account for the user
                    $scope.changeDefault = function (id, account, checked) {
                        if (!checked) {
                            return;
                        }
                        for (i = 0; i < $scope.users.length; i++) {
                            if ($scope.users[i].id == id) {
                                $scope.users[i].
                                default = account;
                            }
                        }
                    }    
            });

1
根据TS的要求,我认为用户和账户是不同的实体,账户本身不应该知道它是否为默认。 - Artur Udod

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接