多个控制器和指令之间的通信

2023-12-22

我有一个支持 HTML5 Canvas 可视化的指令。该指令具有多种方法来修改可视化的不同部分。问题是具有不同父/子/兄弟关系的多个控制器需要与该指令进行通信。现在我已经将这种非常糟糕的方式连接起来,将事件发送到指令的父控制器,然后将它们广播到指令。

我听说过使用服务来做这样的事情,但没有真正解释为什么。我想使用这样的东西:

angular.service('CanvasCommunication', function($rootScope) { 
   this.canvasAction = function() { $rootScope.broadcast('canvasAction'); };
}

然后让画布中的侦听器实际执行该操作。然后可以将该服务注入到与画布通信的任何控制器中。

问题是 $rootScope.broadcast() 的性能很糟糕,我想确保这个通信通道是以最有效的方式构建的。

有没有人处理过类似的事情并想到更好的办法?


我遇到了同样的问题 - 控制器需要相互交互,应用程序的不同部分相互发送消息,等等。在我的项目中,我实现了 MessageService。这是一个非常基本的版本(但说实话绰绰有余):

module.factory('MessageService',
  function() {
    var MessageService = {};

    var listeners = {};
    var count = 0;
    MessageService.registerListener = function(listener) {
      listeners[count] = listener;
      count++;

      return (function(currentCount) {
        return function() {
          delete listeners[currentCount];
        }
      })(count);
    }

    MessageService.broadcastMessage = function(message) {
      var keys = Object.keys(listeners);

      for (var i = 0; i < keys.length; i++) {
        listeners[keys[i]](message);
      }
    }

    return MessageService;
  }
);

您可能希望为特定主题注册侦听器,并按主题过滤消息,也可能不希望。我的还对主题上的消息进行排队,直到它们被清除,以便在加载新视图时可以查看消息(以便将“成功 - 已保存文件”与页面更改配对)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

多个控制器和指令之间的通信 的相关文章

随机推荐

  • 在在线正则表达式测试器中工作时,正则表达式无法在 Angular Validators.pattern() 中工作

    我已经在 Regex101 com 上编写并严格测试了正则表达式 但是当实现到我的 FormControl Validators pattern 方法中时 它显示了意外的行为 这是用于要邮寄的包裹的宽度输入 仅限正值 最多 2 位小数 最小
  • 从 npm 下载一个包作为 tar (不是将其安装到模块中)

    是否有一些 URL 可以让我从 npm 下载给定的包 作为 tarball 或其他东西 我需要最初上传到 npm 的确切文件 Using npm install例如 获取不同的生成的 package json 我想要已发布的确切原始文件集
  • 将 Gradle 5.3.1 升级到 6.5。旧版本下载依赖项正常,但在 6.5 上失败

    我已将问题简化为一个非常简单的项目 该项目声明了对从客户的工件实例提供的模块工件的模块依赖关系 这在 5 3 1 中运行良好 从下面的日志中可以看出 有一行表明 DefaultExternalResourceArtifactResolver
  • java 中的 Thread.sleep() 与同步

    当 Thread sleep 10000 被调用时 当前线程将进入睡眠状态 如果在同步方法中调用Thread sleep 10000 那么在此期间其他线程是否可以执行 如果你这样做Thread sleep 10000 在同步方法中或阻止您d
  • 使用 CakePHP Auth 时出现未定义方法 stdClass::user() 错误

    我对 CakePHP 相当陌生 正在使用 Auth 组件构建一个网站 有几次我尝试用这个组件做一些导致错误的事情 Fatal error Call to undefined method stdClass user in ftphome s
  • 是否可以在 Android 上创建符号链接?

    我想知道在 android 中是否可以从我的 android 应用程序创建符号链接 因为我想使用 sdcard 创建我的应用程序的文件夹 数据的符号链接 我不是 android 方面的专家 但我通常使用 Java nio File File
  • 如何自定义QCalendarWidget?

    我正在尝试将一些样式表应用到我的QCalendarWidget 我已经做了一些改变 这是我现在的代码 QCalendarWidget QWidget background color magenta color green QCalenda
  • multinom() 默认情况下如何处理 NA 值?

    当我跑步时multinom say Y X1 X2 X3 如果对于某一特定行X1 is NA 即缺失 但是Y X2 and X3全部都有值 是否会丢弃整行 就像 SAS 中那样 如何处理缺失值multinom 这是一个简单的例子 来自 mu
  • 如何将 Docker Hub 镜像拉取到 Google Cloud Run?

    我正在尝试将 Docker 映像拉入 Google Cloud Run 我发现我可能需要先将其拉到 Google 容器注册表 但我可以以某种方式避免它吗 另外 我宁愿直接从源头获取它以使其保持最新 我查看了该项目 最后在 Cloud Run
  • Java 对象、更改字段侦听器、设计模式

    有一个类 public class MyClass private String field1 private String field2 private String field3 getters setters 然后我们更新一些字段 M
  • 尽管 flex-basis: 0 [重复],Flexbox 项目的宽度并不相等

    这个问题在这里已经有答案了 我在 Flexbox 中有 4 列 我希望它们的宽度相等 那个有overflow hidden比其他人占据更多的位置 而我无法修复它 在我看来 我遇到了与这篇文章中所述相同的问题 Flexbox 和溢出隐藏无法正
  • 使用“从浏览器中单击”按钮打开客户端的桌面应用程序 - Python/HTML [重复]

    这个问题在这里已经有答案了 我想打开桌面应用程序 例如 记事本 Powerpoint Putty 附上它在共享点上如何工作的图像 随附的示例图像显示了如何通过单击按钮打开 Microsoft Teams 我需要这个精确的复制品 单击 打开
  • Visual Studio 2015 调试并继续

    我们将环境从 Visual Studio 2008 更改为 2015 更新 1 现在我们遇到了一些奇怪的调试行为 当我们遇到断点并更改一些代码并继续时 我们无法再在快速监视或立即窗口中看到某些类型的变量内容 例如数据表 图像 A type
  • 如何测试 PHP 程序? [复制]

    这个问题在这里已经有答案了 有没有办法测试程序代码 我一直在研究 PHPUnit 它似乎是创建自动化测试的好方法 然而 它似乎是面向面向对象的代码 是否有过程代码的替代方案 或者我应该在尝试测试网站之前将网站转换为面向对象 这可能需要一段时
  • System.Text.Json 将字典序列化为数组

    是否可以使用 System Text Json 将字典序列化 和反序列化 为数组 代替 hello world 我需要将我的字典序列化为 key hello value world 最好不必在我的类的字典属性上设置属性 使用 newtons
  • 在Python中的图像中的表格上创建边框

    我有一个图像 其中有一个表格和一些其他数据 我需要为表格绘制边框以分隔每个单元格 My image looks like this What i am trying 1 dilating the image to create contin
  • java读取上传文件的内容

    我知道如何上传文件
  • 如何拦截自定义 HTTP 标头值并将其存储在 Wicket 的 WebSession 中?

    我需要从每个请求中获取特定的自定义 HTTP 标头值并将其放入 WebSession 中 以便以后可以在任何网页上使用它 我相信 Wicket 的方法是使用一个自定义类来扩展具有适当访问器的 WebSession 我的问题是 我需要什么样的
  • Iphone SDK,从 UIImage 创建视频

    我需要根据所选图像创建视频 我有代码它应该可以工作 但在附加缓冲区时给出错误 这就是两种类型图像的保存方式 void imagePickerController UIImagePickerController picker didFinis
  • 多个控制器和指令之间的通信

    我有一个支持 HTML5 Canvas 可视化的指令 该指令具有多种方法来修改可视化的不同部分 问题是具有不同父 子 兄弟关系的多个控制器需要与该指令进行通信 现在我已经将这种非常糟糕的方式连接起来 将事件发送到指令的父控制器 然后将它们广