加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Angular2 组件与模板 -- 输入和输出属性

发布时间:2020-12-17 07:05:41 所属栏目:安全 来源:网络整理
导读:Input and Output properties 输入属性是一个带有@Input 装饰器的可设置属性,当它通过 属性绑定 的形式被绑定时,值会"流入"到这个属性。 输出属性是一个带有@Output 装饰器的可观察对象型的属性。此属性几乎总是返回Angular 的Angular 的 EventEmitter.当

Input and Output properties

  输入属性是一个带有@Input 装饰器的可设置属性,当它通过属性绑定的形式被绑定时,值会"流入"到这个属性。

  输出属性是一个带有@Output 装饰器的可观察对象型的属性。此属性几乎总是返回Angular 的Angular 的EventEmitter.当它通过事件绑定的形式被绑定时,值会“流出”这个属性。

  你只能通过它的输入和输出属性将其绑定到其它组件。

绑定到 组件自己

  本组件的属性绑定到它自己模板上,属性位于 等号(=)的右边。

绑定到 其他组件

? ? ? ?本组件绑定其他组件的属性,其它组件的属性位于等号(=)的左侧。而且?除非这些属性是输入或输出属性

<app-hero-detail [hero]="currentHero" (deleteRequest)="deleteHero($event)">
</app-hero-detail>

为什么 外部组件应该只能绑定到组件的公共(允许绑定) API 上?

  其它组件不应该进行这种毫无限制的访问。 如果任何人都可以绑定到你的组件的任何属性上,那么这个组件就很难维护。

Angular 要求你显式声明那些 API。 它让你可以自己决定哪些属性是可以被外部组件绑定的。

所有数据绑定属性必须是 TypeScript 的公共属性,Angular 永远不会绑定到 TypeScript 中的私有属性。

因此,Angular 需要一些其它方式来标记出那些允许被外部组件绑定到的属性。 这种其它方式,就是?@Input()?和?@Output()?装饰器。

?

声明输入与输出属性

@Input()  hero: Hero;
@Output() deleteRequest = new EventEmitter<Hero>();

另外,还可以在指令元数据的?inputs?或?outputs?数组中标记出这些成员:

@Component({
  inputs: [‘hero‘],outputs: [‘deleteRequest‘],})

输入还是输出?

  输入属性通常接收数据值。?输出属性暴露事件生产者,如?EventEmitter?对象。

给输入/输出属性起别名

例如,在?<div>?上用?myClick?选择器应用指令时, 希望绑定的事件属性也叫?myClick

<div (myClick)="clickMessage=$event" clickable>click with myClick</div>

把别名传进@Input/@Output 装饰器,就可以为属性指定别名,即把?myClick?这个别名指向了指令自己的?clicks?属性:click.directive.ts

@Output(‘myClick‘) clicks = new EventEmitter<string>(); //  @Output(alias) propertyName = ...

也可在?inputs?和?outputs?数组中为属性指定别名。 可以写一个冒号 (:) 分隔的字符串,左侧是指令中的属性名,右侧则是公共别名:click.directive.ts

@Directive({
  outputs: [‘clicks:myClick‘]  // propertyName:alias
})

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读