当我拥有所有实例化的部分时,如何在 Angular SPA 中重绘 ITHit Ajax 文件浏览器

How can I redraw the ITHit Ajax File Browser in an Angular SPA when I've got all the instantiated parts?

本文关键字:SPA Angular 浏览器 文件 Ajax ITHit 拥有 实例化 分时      更新时间:2023-09-26

由于各种原因,我不会深入,我已经成功地将ITHit Ajax文件浏览器包装在一个Angular Controller中,它本身被加载并包装在一个Angular-UI-Router UI-View中。

所有设置都是通过前面的服务调用配置的(以支持具有 shifty url 的云环境),我什至已经解决了我所有的 CORS(跨源请求)问题,并且我们已经在 DAV 服务器上连接了自定义 Oath2 实现。所有这些都成功地与ITHit文件浏览器配合使用,作为我们内容浏览实现的一个非常核心的东西。

截至目前,当我导航某些区域时,Angular-ui-router 会调整 URL,视图会响应,并且包装 ITHit 的角度控制器会响应视图更改,并且(无需重新加载视图)使用可用的 IT Hit 命令重新获取适当的 DAV URL(例如 SetSelectedFolderAsync)

这是我(希望很简单)的挑战:当我导航到某些区域时 - Angular-UI-router 只是用新内容重新加载包含的 UI-View,但当我返回时 - ITHit Ajax 文件浏览器不会重绘。

以下是我挑战的一些准则(如果您提供我可以处理的东西,则可以忽略):

  1. 我宁愿避免"隐藏"ITHit容器(因为这无关紧要,我不想管理保持它日期,因为状态在视图中更改。这些更改会影响 DAV 路径)。我也不想担心不必要的网络流量。我真的很想让Angular-UI-Router用浏览器所在的 UI 视图。
  2. 我想保留任何需要调用的调用都可以调用到角度控制器(它管理身份验证、路径解析和上下文设置配置 - 随着用户导航而变化)。
  3. ITHit解决方案生成的所有内容(最重要的事情)都是存储在单例("DavBrowserService")中 - 所以当我返回文件浏览器视图,我从初始存储了所有内容实例化包括:
    • ITHit 对象的实例
    • 生成的 ITHit.Loader 实例
    • 以前生成的 AjaxFileBrowser.Controller Object (ITHit.oNS.Controller) 的实例
    • 以前生成的 WebDavSession 对象 (ITHit.oNS.WebDavSession) 的实例

有了上述内容 - 我希望我可以简单地将这些实例重新连接到现在返回的 dom-node('afb-content-div')。任何帮助都非常感谢!

更新:下面的"答案"虽然看起来是功能性的 - 实际上不是。但是,我已经解决了这个问题,方法是在用户导航离开时抓取 DOM 实例并将其存储内存,并在用户导航回相应区域后重新附加它。这样,所有的ITHit Magic仍然绑定到正确的DOM节点上,我不必担心部分重新实例化的怪异。 现在似乎很扎实。


我想通了!!看起来如果我通过调用来重新实例化控制器:

   var controllerInstance = new ITHit.oNS.Controller( originalSettingsObj );

一切都神奇地重新布线!我已经包装了上面的代码,并检测了"afb-content-div"HTML DOM 节点是否有子节点。

经过对代码的大量挖掘,看起来这是作为参数返回到 ITHitLoader.oninit 回调的参数对象(来自 AjaxFileBrowserLoader 实例)。

感谢您的参与!