在Angular ngRepeat内编辑时,项目会消失

时间:2015-11-13 01:52:06

标签: angularjs

我有一个项目数组,每个项目都显示为ng-repeat中的指令,如下所示:

create_table

如您所见,ng-repeat上有一个过滤器。在指令内部,用户可以编辑表单中的项目,这些项目显示用户点击其中一个项目时。

当用户编辑影响过滤器的字段时发生故障。如果用户使用过滤器(ctrl.query)找到了该项目,并且如果编辑的文本意味着该项目不再与过滤器匹配,则该项目突然消失,然后用户可以点击保存或任何内容。噗!

最优雅的解决方案是什么?编辑开始时我不想关闭过滤器,因为这样所有项目都会重新出现。我希望过滤器仍能正常工作,但我希望正在编辑的项目即使被过滤掉也要继续显示。

我是否在每个项目中设置了“isOpen”标志,并在过滤器中添加“或isOpen”子句?添加这样的标志对我来说总是让人觉得麻烦,我甚至不确定如何在过滤器语法中做到这一点。

我是否在过滤器中添加了“或isFormVisible”子句?这可能更整洁,但同样,我如何在ngRepeat过滤器语法中做到这一点?

思想?

提前致谢

约翰

2 个答案:

答案 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>