【问题标题】:Dynamic ng-model in ng-repeatng-repeat 中的动态 ng-model
【发布时间】:2015-03-22 23:42:28
【问题描述】:

使用 Angular JS,我有这个对象

var pages = [ 
    { name: 'users', title : "Users" }, 
    { name: 'roles', title : 'Roles' }
];

我正在尝试为用户角色创建一个页面。为此,我需要为每个页面设置 4 个复选框。每个页面必须有 4 条规则。访问、显示、编辑、删除。

在 ng-repeat 中显示页面

<div ng-controller='PageCtrl'>
   <ul>
     <li ng-repeat='page in pages'>
        {{ page.title }}
        <input type="checkbox" name="access"> Access
        <input type="checkbox" name="show"> Show
        <input type="checkbox" name="edit"> Edit
        <input type="checkbox" name="delete"> Delete
     </li>
   </ul>
</div>

所以我需要将这些复选框值传递给 $scope。如何为每个复选框绑定模型?

这样

<input type="checkbox" name="access" ng-model='page.name+_access'> Access

复选框模型名称应以 page.name 开头。像 users_access、users_show...

【问题讨论】:

  • 将它们绑定到“page.access”、“page.show”、“page.edit”、“page.edit”?不要将您的可视化与您的实际视图模型混为一谈。
  • 意思是说你想从控制器知道你勾选了哪些复选框?
  • 是的。我需要控制器中的那些复选框值。

标签: javascript angularjs


【解决方案1】:

您可以使用以下语法:

ng-model="page[page.name+'_access']"

但事实上,看起来人们也可以将这些组移动到控制器中,然后使用另一个 ng-repeat。像这样:

HTML:

<div ng-controller="PageCtrl">
    <ul>
        <li ng-repeat='page in pages'>{{ page.title }}
            <label ng-repeat="right in rights">
                <input type="checkbox" ng-model="page[page.name + '_' + right]" name="{{right}}" />{{right|capitalize}}</label>
            <button ng-click="log(page)">Log</button>
        </li>
    </ul>
</div>

JS:

var module = angular.module('myAp', [])
    .controller('PageCtrl', ['$scope', function ($scope) {
    $scope.pages = [{
        name: 'users',
        title: "Users"
    }, {
        name: 'roles',
        title: 'Roles'
    }];
    $scope.rights = ['access', 'show', 'edit', 'delete'];

    $scope.log = function (page) {
        console.log(page);
    }
}]).filter('capitalize', function() {
    return function (value) {
        return value.charAt(0).toUpperCase() + value.slice(1);
    };
});

Demo.

【讨论】:

  • 谢谢。这很好,但是如果 Log 按钮在 ng-repeat 之外怎么办?因为复选框是大表单的一部分。还有其他表单元素。我需要一键将所有元素传递给控制器​​。
  • Log 按钮除了显示模型中的变化之外什么也不做。 ) 更改复选框的值后点击它,然后检查控制台。
  • 好的。我想我明白了:)谢谢。
  • $scope.log 中的值 = function (page) { console.log(page); } 对于动态声明的 ng-model 来说是未定义的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-26
  • 1970-01-01
  • 2014-10-30
  • 2013-07-10
  • 1970-01-01
  • 2015-08-13
  • 1970-01-01
相关资源
最近更新 更多