1

我可以按输入字段对列表进行排序,以按用户显示目标。但是我无法通过单击用户列表中的名称来完成同样的事情。

在输入字段中输入学生姓名可以正常工作。

    <div id="goalcontent">
        <ul id="listheader">
            <li>
                <p>Student Name: <input data-ng-model="username"></p>
            </li>
        </ul>
        <ul class="goals">
            <li class="{{goal.status}}" ng-repeat="goal in goals | filter:username" >
                <span class="goaldeadline">{{goal.username}}</span>
                <span class="goaltitle">{{goal.goal}}</span>
            </li>
        </ul>
    </div>

这是我给用户的 ng-repeat。ng-click 用于在被点击的 li 上设置一个类。这很好用。我也可以在点击时捕获用户名并进入 setSelected 函数。类更改发生得很好,但是我无法让用户名对列表进行排序。我确定这是一个范围界定的事情,但我无处可去。

    <div id="usercontent">
        <ul class="users">
            <li  ng-repeat="user in users"  ng-click="setSelected(this)" class={{selected}}><span>{{user.firstname}} {{user.lastname}}</span></li>
        </ul>
    </div>

这是我的 setSelected 函数。

$scope.setSelected = function (username) {
    var lastSelected = ''
    if ($scope.lastSelected) {
        $scope.lastSelected.selected = '';
    }
    this.selected = 'selected';
    $scope.lastSelected = this;
    username = (this.user.username);
    console.log(username);
};

控制台正确显示我的用户名。但是我尝试过的任何方法都无法使用它来对目标列表进行排序。

4

1 回答 1

0

不使用 setSelected 函数,我会这样做:(假设用户名和用户在同一个 $scope 中)

<div id="usercontent">
        <ul class="users">
            <li  ng-repeat="user in users"  ng-click="username = user.username" ng-class="{selected: (username == user.username)}"><span>{{user.firstname}} {{user.lastname}}</span</li>
        </ul>
 </div>

1- 使用 ng-class 您可以有条件地添加“选定”类

2- 使用 ng-click 将用户名设置为所选用户。它会改变你的输入文本,并被你的 ng-repeat 过滤器使用。

希望我明白你想知道的。我对你的 setSelected 函数有点困惑。通常我不会在控制器中使用“this”,而且我之前也没有真正看到过。

于 2013-10-29T00:02:23.903 回答