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

前端之家收集整理的这篇文章主要介绍了在同一个DOM元素上的angularjs-ng-repeat和ng-controller前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我们可以将ng-controller和ng-repeat附加到同一个DOM元素吗?
Fiddle

这是HTML:

  1. <table>
  2. <tbody ng-controller="UserController" ng-repeat="user in users" ng-click="toggleSelectedUser()" ng-switch on="isSelectedUser()">
  3. <tr>
  4. <td>{{user.name}}</td>
  5. <td>{{user.email}}</td>
  6. </tr>
  7. <tr ng-switch-when="true">
  8. <td colspan="2">
  9. {{user.desc}}
  10. </td>
  11. </tr>
  12. </tbody>
  13. </table>

这是代码

  1. angular.module("myApp",[])
  2. .controller("UserController",["$scope",function($scope) {
  3. $scope.users = [
  4. {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"}
  5. ];
  6. $scope.selected = false;
  7.  
  8. $scope.toggleSelectedUser = function() {
  9. $scope.selected = !$scope.selected;
  10. };
  11.  
  12. $scope.isSelectedUser = function() {
  13. return $scope.selected;
  14. };
  15. }]);

我认为将ng-controller和ng-repeat绑定到同一个DOM元素是有意义的.由ng-repeat创建的范围可由控制器管理.我想要的是所选择的变量对于每个范围应该是唯一的.

解决方法

你应该把你的控制器分成UserListController和UserController.用户列表应该是UserListController的一部分,每个项目都可以由UserController管理

就像是

  1. <table ng-controller='UserListController'>
  2. <tbody ng-controller="UserController" ng-repeat="user in users" ng-click="toggleSelectedUser()" ng-switch on="isSelectedUser()" ng-init="user=user">

所以用户控制器变成了

  1. angular.module("myApp",function($scope) {
  2. $scope.selected = false;
  3.  
  4. $scope.toggleSelectedUser = function() {
  5. $scope.user.selected = !$scope.selected;
  6. };
  7.  
  8. $scope.isSelectedUser = function() {
  9. return $scope.user.selected;
  10. };
  11. }]);

猜你在找的HTML相关文章