控制器之间的角度和传递对象

时间:2016-05-09 10:00:17

标签: javascript angularjs

我正在使用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推送到索引。

所以,请指出我的角度方向。

4 个答案:

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

有许多方法可以在控制器之间传递数据,这取决于用例...

  1. 您可以将数据存储在控制器A'的存储中(在本地存储,Cookie,会话存储等中)。然后检索控制器B'中的数据。什么时候加载。
  2. 优点: - 高度适应性地存储多组数据,可以在状态/视图,站点和浏览器会话之间保持持久性。

    缺点: - 比URI加载或Angular'服务更慢的读/写时间。 - 根据数据集的数据读取/写入频率可能很高,数据更容易被第三方劫持。

    1. 您可以通过州政府传递数据'如果你正在使用ui-router来处理你的状态/观点。
    2. 优点:   - 人类可读的链接,允许加载持久数据。   - 可以作为链接发送给某人,并且加载的数据在用户之间保持一致。

      缺点:   - 如果使用太多,逻辑可能会很快变得混乱    属性/数据值。   - 可能会遇到与URI有关的编码/解码问题。

      1. 您可以使用'服务'提供者作为Angular的一部分,它可能只有一个实例(单例)。
      2. 优点:   - 读取/写入时间在内存中完成,因此比本地存储或会话存储更快。   - 根据用例,可以比本地存储和/或会话存储更容易编写单元测试。

        缺点:   - 网站或浏览器会话之间不会保留数据。

        显然YMMV(你的Milage可能会发生变化)与这些相关,并且它们作为参考来确定哪种解决方案适合您的用例。

        tl; dr - 就我个人而言,我相信(除非数据必须在页面重新加载时继续存在)Angular' service'将是您问题的最佳解决方案。

答案 3 :(得分:0)

解决方案:不要

控制器A - 添加项目

添加空虚拟对象

控制器B - 选择项目

保存到localStorage

返回控制器A

将虚拟物替换为真实物体

感谢您敞开心扉,有时候问这个问题就够了:)