我正在使用 Angular 1。我有一个待办事项列表应用程序,其中有一个执行服务器端交互的智能(容器)组件,以及一个显示待办事项列表和要创建的文本字段的哑/纯/无状态演示组件一个新的。演示组件有一个 onCreate
事件绑定(bind),因此父组件可以 POST Todo
每当创建时就发送到服务器。
<todo-container>
<todo-list todos="vm.todos" on-create="vm.postTodoToServer($event)"> </todo-list>
</todo-container>
每个Todo
在 <todo-list>
演示组件也应该有一个 ID,以便可以执行 PUT/PATCH/DELETE 操作(我们将来将为 onUpdate
实现 onDelete
和 <todo-list>
绑定(bind)。但是,对于新添加的 Todo
,我不会直到 Todo
被 POST 到服务器才知道该 ID。因此,当服务器最终响应时,<todo-container>
必须向 <todo-list>
提供新创建的 Todo
的 ID。
如何在不紧密耦合两个组件的情况下以优雅的方式处理这个用例?我可能想使用<todo-list>
在应用程序其他位置的不同容器内(可能没有服务器端交互)。
最佳答案
当数据仅存在于客户端时,一种选择是使用实用程序库中的 UUID 生成器作为临时 ID。您还可以将 id 设为负数,以便您的服务器进程知道,当待办事项被发布时,它实际上并不存在于服务器上,因此需要为其分配一个真实的 id,以与服务器 ID 模式。然后只需使用 POST 调用返回的真实服务器分配数据覆盖待办事项列表项即可。
例如,Lodash(一个实用程序库)有一个独特的 id 生成器函数。
关于javascript - AngularJS:组件树以及如何处理新创建实体的 ID(通过 HTTP),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41685733/