我有一个项目数组,每个项目都显示为ng-repeat中的指令,如下所示:
create_table
如您所见,ng-repeat上有一个过滤器。在指令内部,用户可以编辑表单中的项目,这些项目显示用户点击其中一个项目时。
当用户编辑影响过滤器的字段时发生故障。如果用户使用过滤器(ctrl.query)找到了该项目,并且如果编辑的文本意味着该项目不再与过滤器匹配,则该项目突然消失,然后用户可以点击保存或任何内容。噗!
最优雅的解决方案是什么?编辑开始时我不想关闭过滤器,因为这样所有项目都会重新出现。我希望过滤器仍能正常工作,但我希望正在编辑的项目即使被过滤掉也要继续显示。
我是否在每个项目中设置了“isOpen”标志,并在过滤器中添加“或isOpen”子句?添加这样的标志对我来说总是让人觉得麻烦,我甚至不确定如何在过滤器语法中做到这一点。
我是否在过滤器中添加了“或isFormVisible”子句?这可能更整洁,但同样,我如何在ngRepeat过滤器语法中做到这一点?
思想?
提前致谢
约翰
答案 0 :(得分:2)
可能会有更优雅的解决方案,但我可能会遵循Angular文档中的示例。
https://docs.angularjs.org/guide/forms#binding-to-form-and-control-state
编辑开始时,将正在编辑的项目复制到填充编辑控件的新对象(幕后视图控件仍然是主对象)。保存后,将更新后的对象复制到主对象中,此时将恢复为查看模式,并且过滤器将隐藏它。
这些方面的东西:
#include <stdio.h>
int main(void)
{
char command[] = "echo 82 509 8274";
FILE *fp = popen(command, "r");
if (fp != 0)
{
int first;
if (fscanf(fp, "%d", &first) == 1)
printf("Got %d from the command\n", first);
pclose(fp);
}
return 0;
}
我将正在编辑的项目中的ID与列表中每个项目的ID进行比较,以确保一次只能有一个项目。这是一个示例plunk。
更新:此处的另一个plunk使用了不同的查询过滤器,当您进入编辑模式时,您所做的就是设置一个标志。与之前的类似,但没有主对象代码。如果你已经有了编辑模式,这似乎应该很快应用。
答案 1 :(得分:0)
我建议您使用ng-model-options
和$render
选项,这是一个有效的示例: http://plnkr.co/edit/IFpXBYeJx1wrbKhhzMZg?p=preview
<form name="userForm">
<label>Name:
<input type="text" name="name" ng-model="name" ng-model-options="{ updateOn: 'click' }" />
</label>
<button ng-click="userForm.userName.$render();">Update Now</button>
<br />
</form>