jquery - 如何更改列表中只有一个用户的状态?

标签 jquery css angularjs

我有一个登录我的应用程序的用户列表,他们可以有三种状态:信息、成功和帮助,并在每个用户旁边制作了三个按钮,以便他们可以在单击这些按钮时更改他们的状态。当用户单击特定按钮时,我想更改该按钮的类,但我被困在这里,因为当我单击某个用户的某个按钮时,他更改了首先登录到应用程序的用户的状态(我列表中的第一个用户) ).

这是我的 html:

    <ul class="list-unstyled" style="color:white; font-size:20px;
    margin-top:-10px; margin-left:-14.5px">
        <li style="padding: 15px 0px 15px 30px; border-bottom:solid #0A2A0A;
        margin-right:-14.5px" ng-repeat="user in users">
            {{user.username}}
            <span style="padding-right:15px"></span>
            <div class="btn-group btn-group-md" role="group" aria-label="...">
                <button id="info" type="button" class="btn btn-info" 
                ng-click="info(user.username)">
                    <i class="glyphicon glyphicon-pencil"></i>
                </button>
                <button id="success" type="button" class="btn btn-default" 
                ng-click="success(user.username)">
                    <i class="glyphicon glyphicon-ok"></i>
                </button>
                <button id="help" type="button" class="btn btn-default" 
                ng-click="help(user.username)">
                    <i class="glyphicon glyphicon-question-sign"></i>
                </button>
            </div>
        </li>
    </ul>

这是该 html 的 Controller :

    taskApp.controller('TaskNumController', function($scope, $route, $routeParams){
        $scope.tasks = $route.current.locals.task;
        $scope.users = $route.current.locals.users;

        $scope.success = function(name){
            $('#info').removeClass('btn-info').addClass('btn-default');
            $('#success').removeClass('btn-default').addClass('btn-success');
            $('#help').removeClass('btn-danger').addClass('btn-default');
        };
        $scope.help = function(name){
            $('#info').removeClass('btn-info').addClass('btn-default');
            $('#success').removeClass('btn-success').addClass('btn-default');
            $('#help').removeClass('btn-default').addClass('btn-danger');
        };
        $scope.info = function(name){
            $('#info').removeClass('btn-default').addClass('btn-info');
            $('#success').removeClass('btn-success').addClass('btn-default');
            $('#help').removeClass('btn-danger').addClass('btn-default');
        };
    });

taskApp 是我的模块的名称。

谁能帮帮我?我将非常感激 :)

最佳答案

在这种情况下,最好的办法是在元素上使用 ng-class 属性,而不是在 Controller 中处理样式更改。

Controller

taskApp.controller('TaskNumController', function($scope, $route, $routeParams){
        $scope.tasks = $route.current.locals.task;
        $scope.users = $route.current.locals.users;
        $scope.setUserStatus = function(user, status){
           user.status = status;
        }
    });

查看

<div class="btn-group btn-group-md" role="group" aria-label="...">
                <button id="info" type="button" class="btn" 
                ng-click="setUserStatus(user, 'info')" ng-class="{'btn-info': user.status === 'info', 'btn-default': user.status !== 'info' }">
                    <i class="glyphicon glyphicon-pencil"></i>
                </button>
                <button id="success" type="button" class="btn btn-default" 
                ng-click="setUserStatus(user, 'success')" ng-class="{'btn-success': user.status === 'success', 'btn-default': user.status !== 'success' }">
                    <i class="glyphicon glyphicon-ok"></i>
                </button>
                <button id="help" type="button" class="btn btn-default" 
                ng-click="setUserStatus(user, 'help')" ng-class="{'btn-danger': user.status === 'help', 'btn-default': user.status !== 'help' }">
                    <i class="glyphicon glyphicon-question-sign"></i>
                </button>
            </div>

这意味着您必须为每个用户维护一个状态,但这应该没什么大不了的。或者,您也可以在 ng-click 中设置状态 (ng-click="user.status = 'info';") 而不是调用函数,但我认为如果 Controller 实际处理会感觉更干净一些那个。

关于jquery - 如何更改列表中只有一个用户的状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37373920/

相关文章:

angularjs - 如何禁用谷歌地图中的卫星和街景选项

jquery.validate、jquery.metadata 和 html5 数据

javascript - HTML平滑滚动[没有 anchor 动画]?

css - 我可以从另一个元素悬停在 css 中定位特定元素吗

java - 无法从类似于下拉框的弹出窗口中选择值

javascript - 根据分辨率改变一个JS函数

javascript - 在angularjs中突出显示html字符串内的多个文本

javascript - angular chart.js 的数据属性中的表达式

jquery - 更改日期选择器插件中下一个和上一个按钮的位置

jquery kwicks 调整我的图像大小