【问题标题】:Comparing 2 strings from HTML file - Angular比较 HTML 文件中的 2 个字符串 - Angular
【发布时间】:2019-08-07 09:00:35
【问题描述】:

我正在使用 Angular 7,我想知道如何比较两个 strings。在这种情况下,我的每个strings 都模拟一个date,比如说“2019-12-26”和“2018-12-26”。

在Javascript 中比较它们非常简单,因为我只需要使用运算符:

console.log(today > "2018-12-06");

它正在按照我的预期工作。它基本上返回true。不过,我试图从我的 HTML 文件中做同样的事情

 <div *ngIf="today > example.endDate">

作为today 和'example.endDate' 两个strings 包含与我在Javascript 示例中使用的完全相同的strings,但它没有显示它们中的任何一个。

还有其他方法可以进行这种比较吗?

问候, 马里奥

更新 我再次查看了这个问题,似乎比较不是问题,但获取变量的方式是。

我在ngOnInit() 中得到一个变量。

 ngOnInit() {

    this.getCurrentDate();
  }

  //Get current date
  getCurrentDate() {
    let aux = new Date();
    //2 characteres
    let dd = String(aux.getDate()).padStart(2, "0");
    let mm = String(aux.getMonth() + 1).padStart(2, "0"); //January is 0!
    let yyyy = aux.getFullYear();
    let today = yyyy + "-" + mm + "-" + dd;
    let other = "2019-01-31";
  }

问题是我直接在我的HTML 中使用了这个变量,就像我之前展示的那样。我得到的错误如下:

错误错误:ExpressionChangedAfterItHasBeenCheckedError:表达式 检查后有变化。以前的值:'ngIf:未定义'。 当前值:'ngIf: true'。

所以问题是我在获取value 之前在HTML 文件中使用了一个变量。或者至少我是这么理解的

为了检查这个错误,我创建了一个Stackblitz 表示。在它上面,我创建了两个例子:

  1. 变量不在ngOnInit()
  2. ngOnInit() 中的变量

https://stackblitz.com/edit/angular-jjgsmq?file=src%2Fapp%2Fhello.component.ts

【问题讨论】:

  • 它似乎工作正常stackblitz.com/edit/…。分享你的演示代码
  • 是的,我已经尝试过了,它确实有效。看来我的问题是我使用了一个在初始化时得到的变量。我将尝试更好地解释它更新问题。如果您能看一下,我将不胜感激:)
  • 好像另一个用let声明为局部变量,不是组件变量
  • 我认为解决方案是在获取值后渲染视图,但我不知道该怎么做
  • 来自@ShashankVivek stackblitz,即使我稍后更改其他日期,它似乎也能正常工作。 stackblitz.com/edit/angular-sk9atk你能在stackblitz上重现你的问题吗

标签: html angular date


【解决方案1】:

最简单的解决方案就是 您确定 ngOnInit 是适合您的 LifeCycle 钩子吗? 如果组件“重”以呈现其他明智的 ngAfterViewInit() 将是我的选择,我会尝试 ngAfterContentInit()

<div *ngIf="IsTodayBigger()">

    ngOnInit() {
    this.getCurrentDate();
  }

 IsTodayBigger(): boolean {
    today=this.getCurrentDate()
    exampleEndDate= example.endDate;//use binding or ViewChild if needed
  return today&&exampleEndDate&& today> example.endDate
  }

  //Get current date
  getCurrentDate() {
    let aux = new Date();
    //2 characteres
    let dd = String(aux.getDate()).padStart(2, "0");
    let mm = String(aux.getMonth() + 1).padStart(2, "0"); //January is 0!
    let yyyy = aux.getFullYear();
    today = yyyy + "-" + mm + "-" + dd;
    let other = "2019-01-31";
  }

【讨论】:

  • 不知道这是否是最佳做法,但它确实有效。谢谢:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多