我正在使用c#web api制作angularjs应用程序。
我有控制器A和B.
在控制器A中,我有一个对象列表,当我点击添加(在两个列表项之间)时,我到达控制器B.
//add item
$location.path("/controllerB")
在控制器B内部,我选择了另一个对象列表,当我选择时,我需要所选项目,在控制器A的列表中,在指定的索引处显示。
到目前为止我的方法:
Localstorage:我使用localStorage来存储所选对象,所以它可以从Controller A访问,但是我还需要索引,如果我将它存储在LS中以便从Controller B访问,我就会走上一条错误决策的道路我觉得:D
到目前为止我最好的猜测:
1。将控制器A中的索引保存在本地存储中。 (转到B)
2. 将本地存储中的控制器B中的selectedItem保存。 (转到A)
3. 将selectedItem推送到索引。
所以,请指出我的角度方向。
答案 0 :(得分:1)
考虑使用Angular Service来保存数据, 然后在Controller A和Controller B中注入该服务。
看看这个主题:
What's the correct way to communicate between controllers in AngularJS?
答案 1 :(得分:1)
在控制器之间共享对象的最佳方法是使用Services。您可以创建共享数据服务并将其注入多个控制器。
app.service('sharedData', function() {
this.sharedData = ... //some data;
});
Using Services to Share Data Between Controllers
https://egghead.io/lessons/angularjs-sharing-data-between-controllers
如果要在多个浏览器会话中保留数据,请使用本地存储。例如,存储用户收藏夹,购物车项目等(如果这些没有存储在服务器上)。
另一件事,也为本地存储创建一个包装器服务。此服务可以跨不同组件注入,并且可以重复使用。
https://gist.github.com/ShivrajRath/f19eb65a361a8c0aff89#file-ng-localstorageservice-js
答案 2 :(得分:0)
有许多方法可以在控制器之间传递数据,这取决于用例...
优点: - 高度适应性地存储多组数据,可以在状态/视图,站点和浏览器会话之间保持持久性。
缺点: - 比URI加载或Angular'服务更慢的读/写时间。 - 根据数据集的数据读取/写入频率可能很高,数据更容易被第三方劫持。
优点: - 人类可读的链接,允许加载持久数据。 - 可以作为链接发送给某人,并且加载的数据在用户之间保持一致。
缺点: - 如果使用太多,逻辑可能会很快变得混乱 属性/数据值。 - 可能会遇到与URI有关的编码/解码问题。
优点: - 读取/写入时间在内存中完成,因此比本地存储或会话存储更快。 - 根据用例,可以比本地存储和/或会话存储更容易编写单元测试。
缺点: - 网站或浏览器会话之间不会保留数据。
显然YMMV(你的Milage可能会发生变化)与这些相关,并且它们作为参考来确定哪种解决方案适合您的用例。
tl; dr - 就我个人而言,我相信(除非数据必须在页面重新加载时继续存在)Angular' service'将是您问题的最佳解决方案。
答案 3 :(得分:0)
解决方案:不要。
控制器A - 添加项目
添加空虚拟对象
控制器B - 选择项目
保存到localStorage
返回控制器A
将虚拟物替换为真实物体
感谢您敞开心扉,有时候问这个问题就够了:)