我正在尝试创建一个Angular过滤器,允许用户点击一条记录,然后过滤器只显示同一个转发器中的那条记录。
例如,当一个人搜索姓氏“骑士”时,他们会看到一些结果。然后,当用户点击他们想要的特定记录时,他们应该只看到在转发器中显示的那条记录。
<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;
};
答案 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
}
};