AngularJS:在单独的视图中编辑 "pick-one" 字段
AngularJS: Editing a "pick-one" field in a separate view
我正在开发一个 AngularJS 1 (+ Ionic + ui-router) 单页应用程序。除其他外,该应用程序让 'CRUD' 员工和公司。
我在 "edit employee" 页面上遇到困难。此页面显示名字和姓氏字段,并有一个按钮 select 员工工作的公司。单击该按钮时,将打开一个新视图,列出所有现有公司。然后用户可以 select 一个以便将其分配给员工,并返回到前一个屏幕(员工编辑),然后显示(只读)公司名称。
我的问题是,当返回到 'edit employee' 视图时,它的控制器被重新加载,因此对名字和姓氏所做的更改丢失了,因为控制器从加载员工信息开始数据库。
总结发生的事情:
用户打开编辑员工视图
编辑控制器从数据库加载员工数据并填充视图
用户将名字更改为新值(比如从 'John' 到 'Allan')
用户单击 "choose company" 按钮
公司列表视图打开,并显示公司列表
用户select是列表中的一家公司
控制器通过服务将其存储为 "current company" 全局变量,然后返回到编辑员工视图
编辑控制器再次启动,并从数据库重新加载数据,并用 John 重新填充名字。它还读取公司全局变量以显示其名称。
因此对 'Allan' 的更改丢失了:-(
所以我的问题是:管理此类编辑的最佳做法是什么?
此外,如果您有更好的方法将公司从公司列表视图转移到编辑员工视图,而不是使用全局变量,我将不胜感激。
顺便说一句,我不想在打开公司列表之前保存员工更改,因为我想让用户最终完全取消他的编辑。
非常感谢您的帮助
要保持表单的状态,您可以使用服务。当编辑表单范围因一些未保存的更改而被破坏时,您只需将此数据保存到服务中。在此服务中,您甚至可以将其存储到本地存储以在页面刷新后保留数据。
但更好的方法是在编辑表单上使用简单的下拉菜单。如果信息太多,可以使用模态框之类的。
有几种方法可以处理这种情况:
- 既然你提到你正在使用 Ionic 而不是打开一个新视图来显示公司列表使用 Ionic Modal,这样你就可以在同一个控制器中处理所有事情,所以不需要保存全局变量
- 你可以监听 ui-router 的状态变化事件,在员工数据页面上你可以检查 from-state 是否是公司列表,如果是,那么避免对 api 调用获取员工详细信息
我建议使用 Ionic Modal
我正在开发一个 AngularJS 1 (+ Ionic + ui-router) 单页应用程序。除其他外,该应用程序让 'CRUD' 员工和公司。
我在 "edit employee" 页面上遇到困难。此页面显示名字和姓氏字段,并有一个按钮 select 员工工作的公司。单击该按钮时,将打开一个新视图,列出所有现有公司。然后用户可以 select 一个以便将其分配给员工,并返回到前一个屏幕(员工编辑),然后显示(只读)公司名称。
我的问题是,当返回到 'edit employee' 视图时,它的控制器被重新加载,因此对名字和姓氏所做的更改丢失了,因为控制器从加载员工信息开始数据库。
总结发生的事情:
用户打开编辑员工视图
编辑控制器从数据库加载员工数据并填充视图
用户将名字更改为新值(比如从 'John' 到 'Allan')
用户单击 "choose company" 按钮
公司列表视图打开,并显示公司列表
用户select是列表中的一家公司
控制器通过服务将其存储为 "current company" 全局变量,然后返回到编辑员工视图
编辑控制器再次启动,并从数据库重新加载数据,并用 John 重新填充名字。它还读取公司全局变量以显示其名称。
因此对 'Allan' 的更改丢失了:-(
所以我的问题是:管理此类编辑的最佳做法是什么?
此外,如果您有更好的方法将公司从公司列表视图转移到编辑员工视图,而不是使用全局变量,我将不胜感激。
顺便说一句,我不想在打开公司列表之前保存员工更改,因为我想让用户最终完全取消他的编辑。
非常感谢您的帮助
要保持表单的状态,您可以使用服务。当编辑表单范围因一些未保存的更改而被破坏时,您只需将此数据保存到服务中。在此服务中,您甚至可以将其存储到本地存储以在页面刷新后保留数据。
但更好的方法是在编辑表单上使用简单的下拉菜单。如果信息太多,可以使用模态框之类的。
有几种方法可以处理这种情况:
- 既然你提到你正在使用 Ionic 而不是打开一个新视图来显示公司列表使用 Ionic Modal,这样你就可以在同一个控制器中处理所有事情,所以不需要保存全局变量
- 你可以监听 ui-router 的状态变化事件,在员工数据页面上你可以检查 from-state 是否是公司列表,如果是,那么避免对 api 调用获取员工详细信息
我建议使用 Ionic Modal