当用户点击重复时,会生成角度过滤器

时间:2016-08-19 13:40:46

标签: angularjs

我正在尝试创建一个Angular过滤器,允许用户点击一条记录,然后过滤器只显示同一个转发器中的那条记录。

例如,当一个人搜索姓氏“骑士”时,他们会看到一些结果。然后,当用户点击他们想要的特定记录时,他们应该只看到在转发器中显示的那条记录。

enter image description here 我的HTML是这样的:

<md-list-item class="md-3-line" ng-repeat="value in ctrl.results" ng-click="ctrl.showRecord(value)">
    <div class="md-list-item-text" layout="column">
        <h4>Employee Id: <b>{{ value.employeeId }}</b></h4>
        <h4>NetId: <b>{{ value.netId }}</b></h4>
        <p>Name: {{ value.preferredFirstName }} {{ value.preferredLastName }}</p>
    </div>
</md-list-item>

并在此函数中将所选记录传递给我的控制器:

vm.showRecord = function (selectedRecord, ev) {            
    //need my filter here
};

我查看过滤器上的一些示例,但我不太清楚如何使过滤器更新与用户点击的重复次序完全相同。

**根据Tom Chen的工作编辑显示答案**

对于使用控制器作为语法的任何人来说,这就是答案。 HTML:

<md-list-item class="md-3-line" ng-repeat="value in ctrl.results | filter:ctrl.selectedId"  ng-click="ctrl.showRecord(value.employeeId)">
<div class="md-list-item-text" layout="column">
<h4>Employee Id: <b>{{ value.employeeId }}</b></h4>
<h4>NetId: <b>{{ value.netId }}</b></h4>
<p>Name: {{ value.preferredFirstName }} {{ value.preferredLastName }}</p>
</div>
</md-list-item>

控制器:

vm.showRecord = function (selectedRecord) {
vm.selectedId = selectedRecord;
};

2 个答案:

答案 0 :(得分:1)

您只需使用角度滤镜表达式即可实现此目的:

<md-list-item class="md-3-line" ng-repeat="value in ctrl.results | filter:vm.selectedId" ng-click="ctrl.showRecord(value.employeeId)">
    <div class="md-list-item-text" layout="column">
        <h4>Employee Id: <b>{{ value.employeeId }}</b></h4>
        <h4>NetId: <b>{{ value.netId }}</b></h4>
        <p>Name: {{ value.preferredFirstName }} {{ value.preferredLastName }}</p>
    </div>
</md-list-item>

并在您的控制器中:

vm.showRecord = function (id) {            
    vm.selectedId = id;
};

带有工作示例的更新答案

以下是Plunker

中的示例

答案 1 :(得分:0)

你可以用ng-if

来做
<md-list-item ng-if="!ctrl.selectedRecord || ctrl.selectedRecord === value" ng-repeat="value in ctrl.results" ng-click="ctrl.showRecord(value)">
    ...
</md-list-item>

JS

vm.showRecord = function (selectedRecord, ev) {
    //if the record is already selected toggel it off
    if(vm.selectedRecord === selectedRecord) {
        vm.selectedRecord = undefined;
    } else {
        vm.selectedRecord = selectedRecord
    }
};