0

情况:

我使用 angular.js 作为前端(新手),使用 symfony2 (php) 作为后端。我查询用户和组的列表。所以html可能看起来像这样。

<ul class="user-list">
    <li ng-repeat="user in users">
        <a ng:click="select(user)">
              {{user.first_name}} {{user.last_name}}
        </a>
    </li>
</ul>

<div class="user-was-selected" ng-show="selectedUser != null">
    <ul class="dropdown-menu">
        <li ng-repeat="group in groups"><a>{{ group.name }}</a></li>
    </ul>
</div>

当从列表中选择用户时,将显示另一个视图,其中显示一个包含组的下拉列表。这是所有可用的组。所以列表查询不依赖于用户。

但是,用户可以是组的成员。所以我需要在 li 元素上设置一个类,比如“in-group”。

在 symfony2 中这很容易,因为它的模板引擎“twig”有类似 user.hasGroup 的方法来检查用户是否在组中。我可以在树枝模板中做到这一点。

我的问题是,我是否必须为此进行休息 api 调用?这意味着我必须为每个用户的每个组进行一次休息 api 组检查。这有任何意义吗?或者您是否看到了另一种解决方案?

除此之外,从下拉列表中单击组将从单击的组中删除/添加(切换)用户。

4

1 回答 1

1

你会添加ng-class到你的li

<ul class="user-list">
    <li ng-repeat="user in users">
        <a ng:click="select(user)">
              {{user.first_name}} {{user.last_name}}
        </a>
    </li>
</ul>

<div class="user-was-selected" ng-show="selectedUser != null">
    <ul class="dropdown-menu">
        <li ng-class="{in-group: selectedUser.inGroup}" ng-repeat="group in groups"><a>{{ group.name }}</a></li>
    </ul>
</div>

您可以像这样将该inGroup方法添加到您的User资源中(假设您有一个工厂):

angular.module('myApp').factory('User', ['$resource', function($resource) {
  var User = $resource(...);

  ...

  User.prototype.inGroup = function(group) {
    //determine if user is in group
    //'this' (selectedUser) and 'group' are at your disposal
    //return true if there's a match
  };

  ...

  return User;
}]);
于 2013-04-19T02:21:25.973 回答