Angular 7:从订阅内部调用时,ChangeDetectorRef detectorChanges() 会导致无限循环

2024-02-11

在阅读了与变更检测和类似帖子相关的所有材料并未能解决我的问题后,我在这里发帖。

变化检测器参考detectChanges()从订阅内部调用时会导致无限循环。如果我不打电话detectChanges, I get ExpressionChangedAfterCheck错误。我真的不知道如何解决,为什么ExpressionChangedAfterCheck错误来了

ngAfterViewInit() {
    this.route.params.subscribe((params) => {
      this.userId = params.userId;
      if (this.userId != undefined) {
        this.loadActivity();
      }
      else {
        alert("Userid not supplied");
      }
      this.cdRef.detectChanges();
    });
  }

  loadActivity() {
    while(this.layers.length > 0){
      this.layers.pop();
    }
    this.loading = true;
    this.userService.authenticatedGet(ApiUrls.GetLocation(this.userId, this.activity.from.getTime(), this.activity.to.getTime()), {}).subscribe(
      (res:any) => {
        this.user = res.user;
        this.loading = false;
        // other logic
        this.cdRef.detectChanges();
        console.log("Loading is " + this.loading);
      }
    );
  }

注意:只有当值与 绑定时才会出现此问题ngIf.


我解决了这个问题。问题不在于生命周期,而在于指令leaflet来自 ngx-leaflet 项目。

当我删除与传单相关的指令和绑定时,所有错误都消失了。

即使这样也出现了错误:

<ng-container *ngIf="!loading">
    <div
      class="map"
      leaflet
      (leafletMapReady)="onMapReady($event)"
      [leafletOptions]="options"
      [leafletLayers]="layers"
      [leafletLayersControl]="layersControl">
    </div>
</ng-container>

我尝试交替添加 detectorChanges 和 markForCheck,但再次没有运气。

  onMapReady(map: Map) {
    this.map = map;
    setTimeout(() => map.invalidateSize(), 1000);
    this.route.params.subscribe(params => {
      this.userId = params["userId"];
      this.loadActivity();
    });
    this.cdRef.markForCheck();
  }

最后,我在写这个答案时放弃了传单,我将尝试 Angular-Google-Maps。

是的,A-G-M 工作得很好。

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

Angular 7:从订阅内部调用时,ChangeDetectorRef detectorChanges() 会导致无限循环 的相关文章

  • node_modules 显示为空,您可能需要运行 `npm install`

    我从 git 克隆了一个 Angular 4 项目 当我转到项目的根文件夹并执行时ng serve 我收到以下错误 node modules appears empty you may need to run npm install 我该如
  • 如何在 Angular 4 中获取 HTTP 请求标头?

    在互联网上 我只看到向 HTTP 请求添加参数 如下所示 this headers append Content Type application json this headers append Accept application js
  • Angular2 i18n:使用 XLIFF 的原因是什么?

    我有点不明白为什么 Angular 团队选择使用 XLIFF 而不是 JSON 我缺少什么 由于投票接近而编辑 我注意到有人说答案是基于观点而不是基于事实 XLIFF 的一个缺点是它比 JSON 更大 我试图了解除了偏好之外是否还有选择 X
  • Angular 2 变更检测是如何工作的?

    在 Angular 1 中 更改检测是通过对 scope 层次结构进行脏检查来进行的 我们会在模板 控制器或组件中隐式或显式创建观察者 在 Angular 2 中 我们不再有 scope 但我们确实重写了 setInterval setTi
  • 让管道自我刷新角度

    我有来自后端的静态时间戳 我想每 1 秒刷新一次管道以获取现在的日期 这是我的烟斗 import Pipe PipeTransform from angular core import moment from moment Pipe nam
  • 在 Angular 4 中处理来自 Api 的过期令牌

    我需要帮助来处理我的角度应用程序中的过期令牌 我的 api 已过期 但我的问题是当我忘记注销我的角度应用程序时 一段时间后 我仍然可以访问主页但没有数据 我能做点什么吗 有没有可以处理这个问题的库 或者有什么我可以安装的吗 更好 如果我什么
  • 将 Angular 项目从 StackBlitz 导出到本地

    我想导出在 StackBlitz 中完成的 Angular 项目 并使用以下命令从 Angular CLI 执行它ng serve就像我们对在本地计算机中创建的 Angular 项目所做的那样 去做就对了 这是您需要点击的地方
  • 无法分配给对象“#”的只读属性“detachedCallback”

    我安装了A Frame https github com aframevr aframe by npm install aframe save 当我使用时 import aframe or use require aframe import
  • Angular 4:如何使用 HTTPClient 读取文本文件的内容

    我的 Angular 4 项目目录中有一个 txt 文件 我想读取其内容 怎么做 下面是我使用的代码 该文件位于 app 文件夹内的 files 文件夹中 我拥有 HTTPClient 代码的组件位于 app 文件夹内的 httpclien
  • Angular 4在下一行显示p标签的换行符

    我有一个 Angular 4 页面 我必须在其中显示用户评论列表 用户可以多行输入评论 我想在多行中绑定文本 我想显示以 n在新行中 我努力了 p p p comment text p 我不想更换 n with br 标签 我想要别的东西
  • RxJS - 我需要取消订阅吗

    如果我有这样的事情 class MyComponent constructor this interval Observbale interval 1000 const c new MyComponent const subscriptio
  • 垫子图标不显示图标

    我喜欢有角度的材料的设计 但使用它可能会很痛苦 该网站展示了一个使用的示例
  • 如果我不使用超时,Angular 2 焦点将不起作用

    正如您所看到的 如果我打算集中输入 我将使用 setTimeout 如果我删除 setTimeout 焦点不起作用 div div
  • 浮动标签和占位符重叠

    div class form group form default form spacing div
  • 测试 - 存根服务方法未定义

    我已经在非常简单的代码上编写了一个非常简单的测试 但由于某种原因存根服务方法未定义 当我使用 Jasmine Spy 时 它可以工作 但对于这样一个简单的任务 有人可以解释一下为什么会发生这种情况吗 我删除了 import 语句只是为了减少
  • 401 Unauthorized("detail":"未提供身份验证凭据。")

    我在后端使用 djoser 的身份验证 当我通过具有内容类型和授权标头的邮递员在 account me 发出获取请求时 我得到了正确的响应 但是当我尝试从我的角度客户端执行相同的请求时 我得到401 Unauthorized detail
  • Webpack 在 Angular 的 ng 服务中的作用

    我是 Angular 的新手 想知道当我们为应用程序提供服务时 Webpack 在幕后扮演什么角色 在最初的印象中 我开始知道 webpack 是一个构建和打包工具 它将所有必需的 JS 文件分组到单独的包中 然而 我无法找到 webpac
  • 令牌中不存在必需的声明 nbf(使用 Firebase Microsoft Sign In 尝试访问 Microsoft Graph)

    我目前有一个具有以下结构的应用程序 Angular 前端 Node js 服务器 我们已实施 Google Cloud 的身份提供商以使用 Google 和 或 Microsoft 进行登录 Google 登录并访问 Google Clou
  • 获取“回调 URL 与 Auth0 不匹配”

    我有一个 Auth0 客户端 配置了以下回调 URL http 本地主机 4200 http localhost 4200 我可以正常登录 问题是当我导航到应用程序中的某个 URL 时 http localhost 4200 places
  • 无法在 Angular 4 中使用自定义主题

    我正在尝试在我的角度项目中使用我的自定义主题 它没有按预期工作 我收到以下错误 node modules css loader sourceMap false importLoaders 1 node modules postcss loa

随机推荐

  • 为什么如果类的成员是引用,则复制对象是非法的?

    我遇到一个测验 指出下面第 18 行中的代码格式不正确 因为 当需要复制的成员之一是引用时 使用隐式定义的赋值运算符是格式不正确的 我无法理解这一点 为什么无法复制引用 为什么16号线是合法的 第 16 行与第 18 行非常相似 复制构造函
  • Socket.io 中的身份验证

    我将尝试验证 socket io 上的连接 目前 用户首先通过 REST API 进行身份验证 然后 我向用户发送JsonWebToken与经过身份验证的用户的用户名 打开客户端和服务器之间的连接后 我的计划是暂时从已连接套接字列表中删除该
  • GEKKO:不响应约束也不求解 obj 函数

    以下是与这个问题相关的内容 使用 Gekko 的 MPC 和 ARX 模型 https stackoverflow com questions 63727310 mpc with arx model using gekko 63731362
  • WPF 中的多行组合框

    我试图找到 WPF 的多行用户可编辑组合框的示例 我们已经使用自定义模板尝试了各种方法 但无法使其工作 我们试图解决的具体问题是在下拉列表中显示地址列表 用户可以同时输入新地址 在组合框中输入内容没有问题 但多行却让我们丧命 如果我们想在
  • 如何绘制不在道路上的路线,MKMapView

    所以我一直在尝试使用 MKMapView 和叠加层来创建 不在道路上的道路 这可能听起来很奇怪 但我想做的是 在我的 iOS 应用程序中 我想绘制特定酒店提供的短途旅行路线 但是到目前为止我发现的所有帖子都集中在现有道路上 因为短途旅行会经
  • “外部 IP 地址”和“公共 IP 地址”这两个术语是同义词吗? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 外部IP地址与公共IP地址以及内部I
  • 使用 for in 循环使类可迭代?

    我有一个自定义类 class MyArrayClass 该类是一个自定义列表实现 我想做以下事情 var arr MyArrayClass MyArrayClass arr append first arr append second ar
  • 解释图像的`srcset`中的`w`

    据我了解 srcset用于根据以下内容确定要加载的图像dpi设备的 我在 Google Web Fundamentals 上看到了这个例子 它似乎使用了w单位连同vw单位恰好是视口宽度的 1 img src lighthouse 200 j
  • Eclipse IDE 中的 C++ 错误“nullptr 未在此范围内声明”

    我正在运行 Eclipse Helios 并且安装了 g 4 6 希望我没有错 g 4 6 实现了 C 11 功能 我创建了一个使用 nullptr 和 auto 关键字的 C 项目 构建出现以下错误 filename cpp 13 13
  • 如何在 Brackets 中设置 jslint ES6 指令?

    我收到此错误 需要一个标识符 但看到的是 const 我正在使用括号文本编辑器 我找到了这个答案 您需要指定 es6 指令 请参阅 JSLint 帮助 但我不知道如何在括号中指定 es6 指令 这是我的代码 const singleQuot
  • 如何在 Java 中启用客户端 TLS 会话重用 [重复]

    这个问题在这里已经有答案了 我有一个 Java 客户端 它可能会创建到同一服务器的多个会话 TLS 协议具有缓存会话密钥的功能 从而避免对每个连接进行昂贵的 PKI 处理 但我无法让它真正发挥作用 openssl s client reco
  • 如何在 C++ 中从 UTexture2D 读取数据

    我正在尝试从虚幻引擎 C 项目中填充的 UTexture2D 读取像素数据 在我在这里发布问题之前 我尝试使用此链接中描述的方法 https answers unrealengine com questions 25594 accessin
  • 为区域注册过滤器

    有没有办法为特定区域注册过滤器 例如下面的代码全局注册授权过滤器 强制进行身份验证 services AddMvc config gt var policy new AuthorizationPolicyBuilder RequireAut
  • URL 的锚点部分是否发送到 Web 服务器?

    比如说 有一个网址 http www example com hello 会不会 hello根据标准 是否将东西发送到网络服务器 现代浏览器如何运作 这个问题的答案与以下问题的答案类似检索 ASP NET URL 中的锚链接 https s
  • clojure 应用程序使用 eval 泄漏内存

    我的 clojure 应用程序评估单独定义的代码 edn文件在运行时 即如果 edn文件更改后 所包含的函数定义将重新加载到原子中 该原子不断用于计算 如果不受限制的话 应用程序似乎会在一段时间后填满 JVM 的元空间 无限制 堆空间使用情
  • IE问题:它可以处理多少个CSS包含?

    我在主题 Drupal 时遇到了一个奇怪的行为 我打开了一些模块 向页面添加了 5 到 10 个链接标签 虽然这些新的样式表被添加到 Firefox 的级联中 但在 IE8 中 通过添加这些样式表 浏览器会从层次结构中丢弃之前添加的 CSS
  • 找不到任何满足 newrelic-plugin-agent 要求的下载

    我尝试安装 MeetMenewrelic plugin agent如中所述https github com MeetMe newrelic plugin agent https github com MeetMe newrelic plug
  • DirectX12 - 执行命令列表和呈现函数

    我在微软的示例中发现 void D3D12HelloTriangle OnRender Record all the commands we need to render the scene into the command list Po
  • 如何检查进程是否具有管理权限

    如何正确检查进程是否以管理权限运行 我检查了IsUserAnAdimMSDN 中的函数 https msdn microsoft com en us library windows desktop bb776463 aspx 但不建议这样做
  • Angular 7:从订阅内部调用时,ChangeDetectorRef detectorChanges() 会导致无限循环

    在阅读了与变更检测和类似帖子相关的所有材料并未能解决我的问题后 我在这里发帖 变化检测器参考detectChanges 从订阅内部调用时会导致无限循环 如果我不打电话detectChanges I get ExpressionChanged