我有一个 Angular SPA,但在其中我使用了一些非 Angular 库(确切地说,Medium Editor [ME from now on])。我为我创建了一个指令,所以如果我contenteditable
在我的视图上添加一个元素,我就会被实例化并正常工作。所以这不是问题。
问题是我还创建了一个特殊的 ME 扩展,它需要向我的服务器发出 Web 请求,以便将正确的标记插入到 ME 的可编辑元素中。但是要发出这些请求,它需要一些视图模型的数据并将其传回:
- 它需要读取并设置(未定义时)我的视图模型 ID
- 它需要不断地操纵其他一些视图模型值,以便我的 SPA 知道它仍在处理中,因此其他进程被推迟
我以为我会简单地包含input type="hidden" ng-model="..."
在我的页面上并更改其值并触发输入事件,以便 Angular 更新其模型。隐藏输入当然不起作用。所以我将其更改为input type="text" class="hidden"
并保留该功能。
这确实有效,但它似乎不是正确的做事方式,因为它很hackish。这主要适用于模型价值交换(获取/设置)。如果我必须调用一些控制器函数怎么样?这甚至有可能吗?
我不想让 ME 的扩展以任何方式依赖 Angular 库,因为它必须是纯粹的 ME 扩展,并且应该在非 Angular SPA 中重用(可能是其他一些 lib SPA 或只是纯粹的简单 DHTML Web 应用程序)。但我想让它在 SPA 中可用,并且 ME 可以很容易地用于操作某些元素的标记,这些标记可以通过指令设置为视图模型。
从非 Angular 原生的外部库与 Angular 应用程序通信的正确方法是什么?
附加信息
基本上我想在我的自定义扩展中有 4 个函数,它们应该以某种方式访问(和操作)我的 Angular 视图模型:
getReferenceId()
和setReferenceId(id)
incrementPending()
和decrementPending()
待处理的计数器可以公开公开并由我的 Angular SPA 访问,因此它不会在扩展程序仍在做自己的事情时处理数据。但是 SPA 对何时设置参考 ID 没有任何权限,因此扩展程序可以正确读取它......