ng-repeat和ng-controller在同一个DOM元素上

Anu*_*eva 9 angularjs angularjs-directive

我们可以将ng-controller和ng-repeat附加到同一个DOM元素中吗? 小提琴

这是HTML:

<table>
    <tbody ng-controller="UserController" ng-repeat="user in users" ng-click="toggleSelectedUser()" ng-switch on="isSelectedUser()">
        <tr>
            <td>{{user.name}}</td>
            <td>{{user.email}}</td>
        </tr>
        <tr ng-switch-when="true">
            <td colspan="2">
                {{user.desc}}
            </td>
        </tr>
    </tbody>
</table>
Run Code Online (Sandbox Code Playgroud)

这是代码:

angular.module("myApp", [])     
    .controller("UserController", ["$scope", function($scope) {
        $scope.users = [
            {name : "Anup Vasudeva", email : "anup.vasudeva2009@gmail.com", desc : "Description about Anup Vasudeva"},
            {name : "Amit Vasudeva", email : "amit.vasudeva2009@gmail.com", desc : "Description about Amit Vasudeva"},
            {name : "Vijay Kumar", email : "vijay.kumar@gmail.com", desc : "Description about Vijay Kumar"}
        ];
        $scope.selected = false;

        $scope.toggleSelectedUser = function() {
            $scope.selected = !$scope.selected;
        };

        $scope.isSelectedUser = function() {
            return $scope.selected;
        };
    }]);
Run Code Online (Sandbox Code Playgroud)

我认为绑定ng-controllerng-repeat相同的DOM元素是有意义的.ng-repeat创建的范围可由控制器管理.我想要的是变量selected对每个范围都应该是唯一的.

Cha*_*ani 11

您应该将控制器分解为UserListControllerUserController.用户列表应该是UserListController的一部分,每个项目都可以通过管理UserController

就像是

<table ng-controller='UserListController'>
        <tbody ng-controller="UserController" ng-repeat="user in users" ng-click="toggleSelectedUser()" ng-switch on="isSelectedUser()" ng-init="user=user">
Run Code Online (Sandbox Code Playgroud)

所以用户控制器就变成了

angular.module("myApp", [])     
    .controller("UserController", ["$scope", function($scope) {
        $scope.selected = false;

        $scope.toggleSelectedUser = function() {
            $scope.user.selected = !$scope.selected;
        };

        $scope.isSelectedUser = function() {
            return $scope.user.selected;
        };
    }]);
Run Code Online (Sandbox Code Playgroud)

  • 这看起来如何使用"控制器为"语法? (5认同)