【问题标题】:Reuse an AngularJS template between page views for the same route在同一路由的页面视图之间重用 AngularJS 模板
【发布时间】:2013-04-21 11:12:13
【问题描述】:

我正在使用第三方 JS API 创建一个附加到我的角度模板上的 html 元素的对象。

每次加载模板时,我都想重用已创建的对象并将其重新附加到正确的 html 元素。

In this plunker 你可以看到演示的问题。以下是重现的步骤。我非常感谢任何关于如何在页面加载之间保留第一个对象的建议。

提前致谢。

问题描述

要理解问题:
  • 点击上方的“显示地图”链接。 “map.html”模板已正确加载并显示地图。
  • 移动地图或稍微放大地图以更改地图
  • 在地图页面上,点击“显示主页”链接返回此页面。
  • 现在,点击主页链接返回此页面
  • 现在,再次点按“显示地图”,您可以看到重新创建的地图。

我希望“map.html”模板重用现有的地图对象,以便地图在页面视图之间保持不变。

【问题讨论】:

    标签: angularjs single-page-application esri jsapi


    【解决方案1】:

    这是一个不平凡的问题。

    angular-gm 模块重用地图实例,因此没有内存泄漏。还有angular-google-maps

    【讨论】:

      【解决方案2】:

      我是在 routeproviderapi 的帮助下完成的

      http://docs.angularjs.org/api/ng.$routeProvider

      您有机会拥有一个解析器,它可以解析您的控制器渲染模板所需的所有依赖项。 我的解析器缓存了特定路由参数的对象,并将返回这个已经实例化的对象。

      所以基本上你的地图对象是你的控制器的依赖。解析器管理此依赖项的注入,您可以在那里实现一些缓存。

      【讨论】:

      • 好的。这是有道理的,但我认为它只解决了一半的问题。现在,使用您的解决方案,地图对象被缓存。自从。它是用'new esri.map("elementID")'创建的,当我们离开时,ID为'elementID'的元素被破坏了。现在我们导航回来,我们仍然有缓存的地图对象,但有一个新元素(尽管 ID 与之前相同)。如果 api 支持 map.setElement(el) 那么这就足够了,但事实并非如此。所以,不知何故,我不仅需要重用地图对象,还要重用 html 元素。
      • 也许您可以在第一次渲染时分离 DOMTElement,缓存它并将其附加回您的 html,如果该指令在某处再次使用。我想了一些指令,可以解决这个问题。代码工程部分留给你 :) 或许这个视频可以给你更多灵感,如何处理egghead.io/video/angularjs-directive-to-directive-communication
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-27
      • 2015-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多