Angularjs   发布时间:2022-04-20  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了typescript – Angular2 @Inputs应该是公共的还是可以/我们应该通过将它们设为私有来实现更严格的API?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用带有Typescript的Angular2

假设我的app组件模板中有以下内容

... 
<coffee-cup [coffee]=""
...

我的咖啡杯组件:

@Component({
  SELEctor: 'coffee-cup',...
})
export class CoffeeCup {

  @input() 
  public coffee = 0;

}

我目前不确定我的输入应该是什么样子.它可能看起来像这样

@input()
public coffee = 0;

要么

@input()
private coffee = 0;

我目前倾向于将成员变量咖啡私有化.

>我想为组件定义一个清晰的公共API
>我只想通过模板公开设置coffee属性
>我目前没有任何理由允许直接从父组件读取或设置咖啡.如果需要,我可以删除私有修饰符.

我查看组件的方式是有两个单独的API与之交互:

>模板API,由@Inputs和@Outputs组成
> Typescript API,包含所有公共属性方法

我没有检查在下列情况下发生了什么,但是,它可能会改变答案:

>假设咖啡成员是公开的.如果我的appComponent使用@ViewChild访问CoffeeCup并设置咖啡成员,生命周期挂钩(如ngOnChangE)会触发吗?

重申一下这个问题:Angular2 @Inputs应该是公开的,还是应该通过将它们设为私有来实现更严格的API?

解决方法

首先,从API设计的角度来看,@ Input意味着公开.从角度来看也是如此,这些装饰器描述了与组件交互的接口.

@Input装饰器或任何其他元装饰器由角度使用,让角度知道您的意图,并更好地理解模板及其与组件类的关系.

在某些情况下,它也被变化检测引擎使用.例如,@ Input是由更改检测跟踪的字段,它向CD引擎提示应该监视此属性.

拥有带@Input装饰器的私有属性不应该在运行时有任何影响.这个修饰符是虚拟的,它在TypeScript到JavaScript编译后消失了.

但是,根据您的环境,可能会出现一些影响:

一般来说,使用TypeScript和元数据的一大好处就是拥有一个智能IDE,这意味着IDE可以在您编写代码时为您提供帮助.拥有私有属性可能会也可能不会影响它,具体取决于每个IDE的实现.
属性上使用@Input将导致IDE在您为该组件编写HTML标记时在智能感知窗口上显示属性.

一个风险因素是未来对打字稿中的缩小/丑化的支持.
顾名思义,私人财产在其他地方使用.这种特性意味着编译器可以更改私有属性名称,因此它们占用更少的字节,这也使它们“更私密”,因为标识符可能会从构建更改为构建.例如:private mySpecialProperty:minification之后的字符串将是p1,编译器将更改类中对此标识符的所有引用以匹配p1.
因此,今天有这个可行,但将来它可能会限制构建功能.

需要虑的另一点是,然angular不关心编译器所做的修饰符,但动态组件创建将受到限制.
换句话说,在html标记中创建组件将没有任何问题,但使用COR_548_11845@ponentResolver动态创建组件 – > ComponentFactor将受到限制,因为您无法使代码将这些输入分配给组件实例.
如果你不打算这样做,那你很好.

这也回答了关于在父/子组件上访问这些属性获取对咖啡组件的引用的问题.只能通过模板标记进行绑定.例如,您将无法手动注册到咖啡组件上注册的EventEmitters.这有时是必需的,请参见THIS场景作为一个示例.

至于生命周期钩,它不应该有任何影响,因为角度不检查类型,但进行存在检查.

因此,总而言之,在大多数用例中你不应该有任何问题,但随着你的应用程序的进展,你可能会解决一些问题,或者没有.您可能还需要在将来选择退出高级缩小功能……

大佬总结

以上是大佬教程为你收集整理的typescript – Angular2 @Inputs应该是公共的还是可以/我们应该通过将它们设为私有来实现更严格的API?全部内容,希望文章能够帮你解决typescript – Angular2 @Inputs应该是公共的还是可以/我们应该通过将它们设为私有来实现更严格的API?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。