0

我有一个 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 没有任何权限,因此扩展程序可以正确读取它......

4

1 回答 1

0

这通常通过将外部插件(或其部分)包装在 ng 服务和指令中来解决。您不需要输入标签,只需将数据放在范围内并从非 ng 代码调用更改后$scope.$digest。如果您需要观察数据更改以触发外部库中的某些内容,您可以使用ng-change$scope.$watch

于 2015-10-27T07:19:03.460 回答