【问题标题】:Call 2nd Angularjs Controller after compete execution of 1st在第一次执行完后调用第二个 Angularjs 控制器
【发布时间】:2015-05-21 18:17:19
【问题描述】:

我是 AngularJs 的新手。我有一种情况,我需要为多个控制器获取相同的数据。所以,我开始知道为此使用 angularJs 服务并从控制器调用该服务。

现在,当我从两个控制器调用此服务时,该服务会被命中两次。我已经在服务中缓存了数据,但是服务仍然向服务器生成了两个ajax请求。

如何处理这种情况?

【问题讨论】:

  • 所以....您正在从两个不同的位置调用服务方法,并想知道为什么它被调用了两次并且对它为什么运行两次感到困惑。这是正确的吗?
  • 标记为低质量,这不是 angularJS 特定的问题,而是软件设计的一般问题。
  • 您可以从服务和控制器发布您的代码吗? (制作一个 jsfiddle,仅包含相关行)如果您只是担心 $http 被调用两次,那么这可能是可以解决的......另一种可能的方法可能是使用 promise chaining
  • 我可能会误解,但我相信 OP 理解服务是单例类型,已设置缓存,但不明白为什么服务器会被两次调用命中两次 - 因为@Shehryar 也许您可以发布您的服务和控制器?

标签: angularjs controller


【解决方案1】:

每次调用服务方法时,无论从哪里调用它,它都会运行。因此,如果您有两个控制器,并且分别从每个控制器调用服务方法,则服务方法将运行两次。

【讨论】:

    【解决方案2】:

    我已经缓存了服务中的数据,但服务仍然会生成 两个ajax请求到服务器。

    如果您说在两个控制器中注入一个服务时不调用两次$http 请求:

    这个SO post 似乎正在实现类似的东西:
    1 个带有 $http 请求的服务和 2 个使用返回的承诺的控制器。

    在这种情况下,第二个控制器在使用服务返回的数据之前等待 broadcast 事件(而不是再次调用 $http 请求)——看看这个实现是否有助于您的应用程序。 GL!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      相关资源
      最近更新 更多