ng-repeat中的动态ng模型

Ras*_*sit 3 javascript angularjs

使用Angular JS,我有这个对象

var pages = [ 
    { name: 'users', title : "Users" }, 
    { name: 'roles', title : 'Roles' }
];
Run Code Online (Sandbox Code Playgroud)

我正在尝试为用户角色创建一个页面.为此,每页需要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>
Run Code Online (Sandbox Code Playgroud)

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

像这样

<input type="checkbox" name="access" ng-model='page.name+_access'> Access
Run Code Online (Sandbox Code Playgroud)

复选框型号名称应以page.name开头.和users_access一样,users_show ......

rai*_*7ow 6

您可以使用以下语法:

ng-model="page[page.name+'_access']"
Run Code Online (Sandbox Code Playgroud)

但事实上,它看起来可以将这些组移动到控制器中,然后使用另一个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>
Run Code Online (Sandbox Code Playgroud)

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);
    };
});
Run Code Online (Sandbox Code Playgroud)

演示.