【问题标题】:angular subscribe not waiting long enough角度订阅没有等待足够长的时间
【发布时间】:2019-03-14 17:17:23
【问题描述】:

我有一个带有 href 的 html 标签的组件。我希望那个 href 的值来自我已经实现并且我订阅的角度服务,但是 href 值没有通过。 我认为这是一个时间问题 - 页面在返回订阅之前呈现。我该如何补救?

<a href="{{links?.someLink1}}"> Click it </a>

然后在我的 ts 我有类似的东西:

    this.myService.getLinks().subscribe(linkList => {
      this.links = linkList;
console.dir(this.links); //this returns the json object so i know it is there
       });

如果我这样写html:

<a href="{{links.someLink1}}"> Click it </a>

我在尝试读取未定义的属性“someLink1”时遇到错误。

更新

我认为这与我缺乏对 Typescript 的理解有关。在我的 ts 我想声明

links: any;

但是当我这样做时,我的模板无法解析 link.someLink1 如果我将 ts 声明更改为 links ={}; 那么它将起作用。但我不明白为什么?

【问题讨论】:

  • 试试&lt;a href="{{links?.someLink1}}"&gt;Click it&lt;/a&gt;
  • 通过说明我认为这是一个时间问题,我假设您甚至不确定是什么导致了您的问题。 links 设置是否正确?那个订阅回调实际上被调用了吗?为什么不从调试代码开始,然后在模板中的某处添加类似links | json 的内容,以检查值是否已设置。
  • 请创建一个minimal reproducible example 并用它更新您的问题。我推荐stackblitz.com
  • 那行不通。如果我省略了?我得到“无法读取未定义的属性‘someLink1’”。我认为页面渲染时链接对象还没有准备好。
  • 我有 console.logs 通知我当 sub 返回时正在设置链接

标签: angular typescript


【解决方案1】:

此语法不正确&lt;a href={{links?.someLink1}} Click it &lt;/a&gt;

因为缺少>"

使用

<a href="{{links?.someLink1}}"> Click it </a>

<a [attr.href]="links?.someLink1"> Click it </a>

另外请记录数据,检查它是否有效的url?

【讨论】:

  • 抱歉打错了
  • 请提供更多信息,无法猜测您的代码在哪里出错。
  • 尝试在订阅函数中添加一些控制台
  • 分享你在开发工具控制台中遇到的错误,如果有的话
  • 控制台没有错误。我从订阅中取回对象,我可以在 href 中访问它,但前提是它被声明为 {} 而不是任何
【解决方案2】:

如果您的问题是没有更新您的 html 绑定,您应该尝试使用异步管道,顺便说一句,您必须在 href 之后放置“”,这样结果将是:

<a href="{{links?.someLink1 | async}}" Click it </a>

【讨论】:

  • 你试过了吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-27
  • 2021-05-31
相关资源
最近更新 更多