【发布时间】:2015-12-16 16:52:11
【问题描述】:
编辑:Plunker 显示问题:http://plnkr.co/edit/R5vNvejX3ncdqSzZst17?p=preview
使用 AngularJS,我有一个包含任务的主数组,例如:
tasks.myTasks = [
{task: "Task 1", done: "Y"}
{task: "Task 2", done: "N"}
];
我想在屏幕上设置一个具有三个选项的选择:
- 显示所有任务。
- 仅显示已完成的任务。
- 仅显示未完成的任务。
我所做的是设置一个带有选项的数组,以及一个在我重复 myTasks 时设置为过滤器的变量:
tasks.filteringOptions = [
"all": '',
"only_done": {done: "Y"},
"only_undone": {done: "N"}
];
tasks.filter = tasks.filteringOptions[0];
在我的 HTML 上,我按如下方式执行 ng-repeat:
<select ng-model="tasksCtrl.filter" ng-options="value as key for (key, value) in tasksCtrl.filteringOptions">
</select>
<div ng-repeat="task in tasksCtrl.myTasks | filter:tasksCtrl.filter">
...
</div>
Only problem is that the code above doesn't work, when the first item of the array is selected (all: '') it works fine, but I when I click the select and change it to one of the other options,它不起作用。
为了测试它,我在 HTML 代码中注释了我的 select 并创建了一个输入:
<input ng-model="tasksCtrl.filter.done" type="text">
这种方法效果很好,我在输入中输入“Y”或“N”,它会按预期过滤myTasks。所以我认为选择错误地设置了tasksCtrl.filter,所以我在select 和input 顶部放置了一个值为tasksCtrl.filter 的div,并测试了它们以查看我会得到什么。
它们在我的 HTML 上都返回了完全相同的结果:
{"done": "Y"}
我也尝试使用 ng-repeat 构建我的 select,但我在网上看到它不接受 value 上的对象,所以我改用 ng-options。
我还注意到这一点:如果我尝试将 filter 变量设置为 {"done": "Y"},当我使用输入时它工作正常,第一个结果已经被过滤,但如果我将选择与 ng -options,过滤器不再起作用。
最后一个问题是:我是否需要处理我的对象值才能将其传递给 ng-options?如果不是,输入和选择如何在变量tasksCtrl.filter 中显示相同的结果,而选择却无法按预期工作?
【问题讨论】:
-
请扔一个笨蛋
-
@Jax 这里是 plunker:plnkr.co/edit/R5vNvejX3ncdqSzZst17?p=preview
标签: javascript arrays angularjs ng-options angularjs-ng-options