在HTML中将参数传递给Angular时,如何引用JavaScript包?

在HTML中将参数传递给Angular时,如何引用JavaScript包?,javascript,html,angular,typescript,Javascript,Html,Angular,Typescript,我想让下面的内容更像是专横 <div (click)="lastCall(999)">click me</div> 我必须像这样在我的TS文件中声明一个属性 private max: number = Number.MAX_SAFE_INTEGER; <div (click)="lastCall(max)">click me</div> 然后像这样引用它 private max: number = Number.MAX_SAFE_INTEGE

我想让下面的内容更像是专横

<div (click)="lastCall(999)">click me</div>
我必须像这样在我的TS文件中声明一个属性

private max: number = Number.MAX_SAFE_INTEGER;
<div (click)="lastCall(max)">click me</div>
然后像这样引用它

private max: number = Number.MAX_SAFE_INTEGER;
<div (click)="lastCall(max)">click me</div>
点击我

是否有方法传递
Number.MAX\u SAFE\u整数直接在通话中?如何实现?

通过将其声明为可注入常量来实现

@Injectable()
export class Numbers{

 public MAX_SAFE_INTEGER = 9999
}
将其注入组件构造函数

constructor(private Number:Numbers){}
然后在html中使用它作为

<div (click)="lastCall(Number.MAX_SAFE_INTEGER)">click me</div>
点击我

您必须编写的原因

export class MyComponent {
  max = Number.MAX_SAFE_INTEGER; // type inference FTW
}
虽然模板在逻辑上是组件的一部分,但它不能访问与组件类相同的词汇环境。之所以
MyComponent
可以访问它,是因为
MyComponent
是普通的旧JavaScript代码

模板存在于不同的环境中

如果使用一个不涉及全局变量的示例,这一点会更清楚

考虑

类别:

import {π} from 'app/constants';

export class MyComponent {
  updateArea(radius: number) {
    this.area = π * radius ** 2;
  }

  area?: number;
}
模板:

<input #radius type="number">
<button (click)="updateArea(radius.value)">
<span>{{area}}</span>
π
永远不会改变。把它投入服务是胡说八道


对于这样的用例,我认为您的“变通方法”(如上面最后一个示例中重复的)实际上是正确的方法。

这是最平滑的方法吗?我的变通工作在代码隐藏中创建了一行额外的代码。您建议的方法创建了一个新文件、一个新类和一个额外的注入。我不会以任何方式质疑你的意见。只是好奇这是否是正确的(最)方法。是的。这就是应该使用硬编码值的方式。假设在接下来的几天内,最大值将被修改为
9999
,您会在所有文件中进行更改吗?当您在编写单元测试时需要模拟最大安全整数时,这将非常方便。一个健壮的解决方案。@AluanHaddad噢,更改每个文件中的值不是首选的解决方案(也不是我想要的解决方案,尽管从实用角度来说,在文件中查找应该可以做到)。我对您建议的解决方案的问题在于,
Number.MAX\u SAFE\u INTEGER
已经有了很好的定义,因此似乎没有必要重新定义它。“你觉得怎么样?”阿鲁安哈达德说,“哦,当然没有人知道。最有可能是因为我像黑洞一样稠密(过去几天睡眠不足+对愚蠢的电脑没有做我想做的事感到沮丧,呵呵)。除此之外,我喜欢讽刺,但我不确定这是否可能是一种方式。现在,有人说-你如何得到
数字.MAX_SAFE_INTEGER
的真正恒常性?