Angular:加载所有指令后在控制器中运行函数

2023-12-09

我正在尝试编写一些代码,这些代码允许我在控制器中运行一个函数,但只有在整个 dom 设置并准备就绪后(包括指令链接函数运行等)。

我目前正在通过 $rootScope 广播在 ctrl/service 和指令之间进行通信。指令未拾取控制器加载时的第一个广播。原因当然是控制器在指令链接函数运行之前加载。我读过一些类似的问题,人们建议对这些调用使用 $timeout 。不幸的是,这并不总是有效,我不想让我的 ctrl/services 被大量的 $timeout 调用弄乱。因此我正在寻找另一种解决方案来解决我的问题。

通讯模式如下:

1.) 控制器告诉服务准备一些数据(通过服务中的函数调用)

2.) 服务告诉指令显示数据(通过广播)

3.) 指令显示数据...或者在我的情况下不显示:(

EDIT:

由于计时在我的应用程序中至关重要,因此我基本上正在寻找一种方法,以便在所有角度组件完成加载后立即在控制器中启动功能。控制器中的该函数将通过为范围变量分配值来显示内容。同时它将开始花费时间。当然,我只能在指令加载后才开始这样做,否则挖掘是错误的,或者指令尚未准备好显示内容等。

我读过 Ben Nadel 的一篇博客文章,它基本上展示了指令是如何加载的。我希望设置一个最后加载的外部指令,这样我就可以从那里触发完成的加载。不幸的是,只要任何内部指令使用 templateUrl,这就不起作用。http://www.bennadel.com/blog/2603-directive-controller-and-link-timing-in-angularjs.htm


使用 $timeout 会很糟糕。不要那样做。您无法定义服务器调用将花费多长时间。

我建议使用这种模式:

  • 让控制器使用服务来加载一些数据,并让 控制器中的 Promise 将返回数据分配给范围变量。
  • 将该范围变量传递到您的指令中。
  • 在指令链接函数中设置一个监视,当它加载时,它将从未定义的值变为所需的值。完毕!

// 在你的控制器中

YourService.all().then(function(data) {
  $scope.data = data;
});

// 在你看来

<some-directive your-data="data"></some-directive>

// 在你的指令中

angular.module('blah.directives').directive('someDirective', function() {
    return {
      scope: {
        yourData: '='
      },
      link: function(scope, element, attrs) {

        var watcher = scope.$watch('yourData', function() {
          if(scope.yourData === undefined) return;

          // at this point your data will be loaded, do work

          // optionally kill watcher at this point if it's not going to update again
          watcher();
        });
      }
    }
  });
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Angular:加载所有指令后在控制器中运行函数 的相关文章

随机推荐

  • 如何将Asterisk服务器与外部关系数据库(例如mysql)集成?

    我的目标 客户端 SIP电话 我使用3CX电话 拨号到asterisk服务器 asterisk然后连接外部关系数据库 与asterisk服务器不在同一位置 如果数据库响应某些内容 asterisk服务器播放语音文件 预定义的 gsm 文件
  • 传递 URL 中包含“%”的参数?

    例如 在传递我的网址时something 8000 something jsp param1 update param2 1000 param3 SearchString param4 3 我收到以下错误 Bad Request Your
  • 将每个组中的行替换为第一行值。熊猫集团

    这是一个数据框 df pd DataFrame A foo foo bar bar bar B 1 2 2 4 1 下面是我想要的样子 这就是我的尝试和失败的方法 groups df groupby A groups apply lambd
  • 使用 jQuery 滚动到某个元素

    我有这个input元素
  • 如何从 C++ 更改 Windows shell (cmd.exe) 环境变量?

    我想编写一个程序 在调用它的 shell cmd exe 实例中设置环境变量 我的想法是 我可以在这个变量中存储一些状态 然后在后续调用中再次使用它 我知道有像 SetEnvironmentVariable 这样的命令 但我的理解是这些命令
  • 在 msi 自定义操作中执行时,MsiOpenDatabaseW 引发访问冲突

    我有一个代码可以修改cached 不是正在安装的 msi 安装程序数据库工作正常在独立 exe 中执行时 但是当它从 msi 自定义操作中运行时 我遇到了非常奇怪的访问冲突 const auto msiProductCode GetProd
  • 为迷宫墙添加碰撞

    有人可以帮我向我的精灵添加碰撞点吗 我过去有一个代码 我在图像上分层了位图 但相同的代码不能很好地集成用于物理绘制线条 而不是检测图像上黑色 灰色的位置 import random import pygame pygame init WHI
  • ExtractAssociatedIcon 返回 null

    我正在使用ExtractAssociatedIcon检索文件图标的方法 我的希望是检索用户在资源管理器窗口中看到的相同图标 public static Icon GetIcon string fileName try Icon icon I
  • 导入错误:没有名为“请求”的模块

    尝试运行 Python 脚本时出现此错误 我已经下载了 requests 1 2 0 文件夹 但我不知道如何处理它 我尝试运行下载中包含的 setup py 文件 但它只是打开命令终端一秒钟然后关闭 我从 Windows 桌面运行 Pyth
  • 网格中不相交路径的近似算法

    我最近遇到了这个问题 我想我可以在这里分享它 因为我无法得到它 我们给定一个 5 5 的网格 编号为 1 25 以及一组 5 对点 它们是网格上路径的起点和终点 现在我们需要为这 5 对点找到 5 条对应的路径 这样两条路径就不会重叠 另请
  • 如何在 pytest 中将自定义部分添加到终端报告

    In pytest 当测试用例失败时 您会在报告中看到以下类别 失败详情 捕获的标准输出调用 捕获的 stderr 调用 捕获的调用日志 我想添加一些额外的自定义部分 我有一个并行运行的服务器 并且希望在专用部分中显示该服务器记录的信息 我
  • 不改变url,通过request.user查看

    我正在尝试编写一个视图 在其中检索当前登录用户的信息 我的视图如下所示 只要我将用户传递到 URL 中的视图 它就可以正常工作 def index request username template index html user get
  • 按出现次数对单词列表进行排序的最简单方法

    在 Java 中 按单词在列表中出现的次数对大型单词列表 10 000 20 000 进行排序的最佳 最简单方法是什么 我尝试了基本的实现 但出现内存不足运行时错误 因此我需要一种更有效的方法 你有什么建议 ArrayList
  • 在小型天蓝色实例中使用 Parallel.Foreach

    我有一个在小型实例上运行的 WebRole 该WebRole有一个将大量文件上传到BLOB存储的方法 根据 Azure 实例规范 小型实例只有1 core 那么 在上传这些 blob 时 Parallel Foreach 会比常规 Fore
  • URL 重写 - 查询字符串

    我有一个新闻 博客 网站 当选择单个帖子时 它会返回以下格式的网址 website net sitenews php q posts view postname 12 我正在寻求重写 url 使其显示为 website net sitene
  • 表单上的令牌方法、双重提交问题

    我花了几周的时间来研究我的表单的双重提交保护 直接说 存储令牌的会话方法不起作用 会话对于刷新页面或某人回顾其历史记录来说工作得很好 但是使用会话无法阻止通过多次单击按钮来进行经典的双重提交 我认为当在几毫秒内处理多次点击时 脚本无法足够快
  • Keras - 用于文本分析的自动编码器

    因此 我正在尝试创建一个自动编码器 它将接受文本评论并找到较低维度的表示 我正在使用 keras 我希望我的损失函数能够将 AE 的输出与嵌入层的输出进行比较 不幸的是 它给了我以下错误 我很确定问题出在我的损失函数上 但我似乎无法解决这个
  • 获取/设置开放图谱帖子的受众

    是否可以获取或设置开放图谱故事帖子的受众 朋友 只有我 公众 根据开发者脸书应该有一个隐私设置字段 我的应用程序确实具有发布权限 publish actions 和读取权限 public profile email user posts 当
  • Matlab 特殊矩阵

    有没有一个MATLAB函数可以生成这个矩阵 1 2 3 4 5 6 7 n 2 3 4 5 6 7 8 n 1 3 4 5 6 7 8 9 n 2 n n 1 n 2 2 n 1 它有名字吗 Thanks 是的 该矩阵确实有一个名称 它被称
  • Angular:加载所有指令后在控制器中运行函数

    我正在尝试编写一些代码 这些代码允许我在控制器中运行一个函数 但只有在整个 dom 设置并准备就绪后 包括指令链接函数运行等 我目前正在通过 rootScope 广播在 ctrl service 和指令之间进行通信 指令未拾取控制器加载时的