Angular装饰器介绍

这篇具有很好参考价值的文章主要介绍了Angular装饰器介绍。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 装饰器的作用就是在添加装饰器的地方在不改动原有代码的情况下增加额外的功能。Angular框架中装饰器是一个函数。他将元数据添加到类、类成员(属性、方法)和函数参数上。让它们在不需要做任何代码变动的前提下增加额外功能。

1 类装饰器

       类装饰器负责把元数据附加到类上,以了解类的设计意图以及这个类是如何工作的。Angular框架里面类装饰器有多种.如下所示:

装饰器 解释 备注
@NgModule 模块装饰器(帮把相关的一些代码逻辑组织在一起) NgModule 可以将其组件和一组相关代码(如服务)关联起来,形成功能单元。每个Angular应用都有一个根模块,通常命名为AppModule
@Component 组件装饰器 组件可以认为是屏幕上的一个视图. 组件定义视图。每个Angular应用都至少有一个组件,也就是根组件
@Injectable 依赖装饰器(把一个类定义为服务) 组件使用服务。对于与特定视图无关并希望跨组件共享的数据或逻辑,可以创建服务类。
@Pipe 管道装饰器 管道的作用就是传输。并且不同的管道具有不同的作用。(其实就是处理数据)
@Directive 指令装饰器 用来控制组件的某些行为

1.1 @NgModule

       @NgModule用来描述Angular应用里面的模块(NgModule)的。也就是说NgModule是一个带有@NgModule装饰器的类。@NgModule的参数是一个元数据对象,用于描述如何编译组件的模板,以及如何在运行时创建注入器。

和其他语言一样,模块指的就是把某些功能整合到一起形成一个模块.模块话编程.

       Angular应用是模块化的,拥有自己的模块化系统.一个模块就是一个NgModule。每个NgModule就是一个容器,用于存放一些内聚的代码块,这些代码块专注于某个应用领域、或者某个工作流或一组紧密相关的功能。它可以包含一些组件、服务提供商或其它代码文件,其作用域由包含它们的NgModule定义。它还可以导入一些由其它模块中导出的功能,并导出一些指定的功能供其它NgModule使用。

       每个Angular应用至少有一个模块,也就是根模块,习惯上命名为AppModule,位于一个名叫app.module.ts的文件中。引导这个根模块就可以启动你的应用。

1.1.1 @NgModule元数据解释

选项 类型 说明
providers? Provider[] 列出当前模块需要的一些共用的服务,这样我们就可以在这个模块的各个组件中通过依赖注入使用这些服务了
declarations? Array<Type<any> 声明属于这个模块的指令,管道等等。模块内部Components/Directives/Pipes的列表
imports? Array<Type<any> | ModuleWithProviders | any[]> 当前模块需要依赖的一些其他的模块,这样做的目的就是使我们这个模块,可以直接使用别的模块exports提供的一些指令,组件等等
exports? Array<Type<any> | any[]> 当前模块需要导出的一些组件,指令,模块等,这样如果别的模块导入了我们这个模块,那么别的模块就可以直接使用我们在这里导出的组件,指令模块等
entryComponents? Array<Type<any> | any[]> 一个组件的集合,它应该和当前组件一起编译。对于这里列出的每个组件,Angular 都会创建一个 ComponentFactory 并保存进 ComponentFactoryResolver 中(动态组件)
bootstrap? Array<Type<any> | any[]> 应用的主视图,称为根组件。它是应用中所有其它视图的宿主。只有根模块才应该设置这个 bootstrap 属性
schemas? Array<SchemaMetadata | any[]> 不属于Angular的组件或者指令的元素或者属性都需要在这里进行声明,允许设置的值有: NO_ERRORS_SCHEMA 和 CUSTOM_ELEMENTS_SCHEMA。NO_ERRORS_SCHEMA: 当前模板中存在未知选择器时它不会显示错误;CUSTOM_ELEMENTS_SCHEMA: 当前模板中可以使用任何类型的自定义元素,这有助于在应用程序中合并除Angular组件之外的Web组件
id? string 它可以是一个名字或者一个路径,用来在调用getModuleFactory的时候区别模块,如果这个属性是undefined那么这个模块将不会被注册,如果有设置id,可以通过getModuleFactory()来获取到当前模块
jit? true 如果是true,则当前模块使用JIT编译,否则使用AOT编译。JIT: 即Just-in-time,动态(即时)编译,边运行边编译。AOT: Ahead Of Time,指运行前编译。

1.1.2 NgModule作用:

  • NgModule 最主要的作用是帮助开发者组织业务代码,把关系比较紧密的一些功能(组件)代码组合在一起。

  • NgModule 用来控制组件、指令、管道等是否可以使用,处于同一个 NgModule 里面的组件默认互相可见,而对于外部的组件来说,只能看到 NgModule 导出(exports )的内容,也就是说,如果你定义的 NgModule不exports任何内容,那么外部使用者即使 import了你这个模块,也没法使用里面定义的任何内容。

  • NgModule 是打包时候用到的最小单位,打包的时候会检查所有 @NgModule 和路由配置,Angular底层是使用webpack打包。因为Angular已经帮我们配置好了webpack,所以开发者轻松很多,否则就需要自己配置环境。

1.2 @Directive

       @Directive修饰的类是指令类。在Angular应用中指令一般用来控制组件(DOM)的某些行为。Angular框架也默认给我们提供很多指令,有结构型指令,属性型指令。

  • 结构型指令: 通过添加和移除DOM元素改变DOM布局的指令. 如NgFor和NgIf.
  • 属性型指令: 改变元素、组件或其它指令的外观和行为的指令。 如NgStyle 和NgSwitch.

1.1.1 @Directive元数据解释

选项 类型 说明
selector? string css选择器名,用于在模板中标记出该指令(组件),并触发其实例化
inputs? string[] 该指令(组件)的输入参数,和@Input装饰器的作用是相同的
outputs? string[] 该指令(组件)可供事件绑定的输出属性
host? {[key: string]: string;} 使用一组键-值对,把类的属性映射到宿主元素的绑定(Property、Attribute 和事件)
providers? Provider[] 服务提供商的集合
exportAs? string 一个或多个名字,可以用来在模板中把该指令赋值给一个变量。当有多个名字时,请使用逗号分隔它们
queries? {[key:string]:any} 配置将要注入到该指令中的一些查询。内容查询会在调用 ngAfterContentInit 回调之前设置好。 试图查询会在调用 ngAfterViewInit 回调之前设置好。

inputs和outputs: 当前指令(组件)的输入和输出。但是最新的Angular版本已经不推荐使用这两个属性了,推荐使用@Input(),@Output()来代替。

@Component({
  selector: 'app-report-template',
  template:
    `
       <div>
         <pre>{{hero}}</pre>
         <button (click)="deleteRequestInit()">Get</button>
       </div>
     `,
  inputs: ['hero'],
  outputs: ['deleteRequest'],
})
export class ReportTemplateComponent {

  public deleteRequest = new EventEmitter();

  deleteRequestInit() {
    this.deleteRequest.emit({'message': 'Are you sure you want to delete this record!.'})
  }
}

// 等价于下面的代码

@Component({
  selector: 'app-report-template',
  template:
    `
       <div>
         <pre>{{hero}}</pre>
         <button (click)="deleteRequestInit()">Get</button>
       </div>
     `,
})
export class ReportTemplateComponent {

  @Input()
  hero;

  @Output()
  deleteRequest = new EventEmitter<any>();

  deleteRequestInit() {
    this.deleteRequest.emit({'message': 'Are you sure you want to delete this record!.'})
  }
}



链接:https://www.jianshu.com/p/57ed7747c45d
 文章来源地址https://www.toymoban.com/news/detail-803086.html

到了这里,关于Angular装饰器介绍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 前端框架之争:Vue.js vs. React.js vs. Angular

    🎉欢迎来到Web前端专栏~前端框架之争:Vue.js vs. React.js vs. Angular ☆* o(≧▽≦)o *☆嗨~我是IT·陈寒🍹 ✨博客主页:IT·陈寒的博客 🎈该系列文章专栏:架构设计 📜其他专栏:Java学习路线 Java面试技巧 Java实战项目 AIGC人工智能 数据结构学习 🍹文章作者技术和水平有限,如果

    2024年02月07日
    浏览(93)
  • 如何使用前端框架(React、Angular、Vue.js等)?该如何选择?

    聚沙成塔·每天进步一点点 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发者,这里都将为你提供一个系统而

    2024年02月07日
    浏览(60)
  • Angular中的装饰器有哪些?怎么用?

            Angular中有一些非常有用的装饰器,用于增强指令、组件等功能。以下是一些常用的装饰器: @ HostBinding :用于绑定宿主元素的属性。可以通过该装饰器将指令或组件中的属性值绑定到宿主元素上。 @ Input :用于接收父组件传递的数据。通过该装饰器可以将父组件

    2024年02月02日
    浏览(33)
  • 大型医院云HIS系统:采用前后端分离架构,前端由Angular语言、JavaScript开发;后端使用Java语言开发 融合B/S版电子病历系统

    一套医院云his系统源码 采用前后端分离架构,前端由Angular语言、JavaScript开发;后端使用Java语言开发。融合B/S版电子病历系统,支持电子病历四级,HIS与电子病历系统均拥有自主知识产权。 文末卡片获取联系! 基于云计算技术的B/S架构的医院管理系统(简称云HIS),采用前后

    2024年02月03日
    浏览(50)
  • angular前端环境搭建、安装angular

    1.下载node.js安装包(要求node版本大于12.20) Node.js官方网站 : https://nodejs.org/en/ 进入官网后,当前页面下载的是最新版本,如需要下载历史版本,点击红框标注的其他下载,在进入的新的页面底部,选择红框标准的先前版本,然后下载相应的版本,在跳转的页面下载win64的版

    2024年02月03日
    浏览(58)
  • angular框架简介基础与使用(全文2w8字)前端框架angular

    本文的所有内容,可以在我的博客上看到,下面是地址。建议去博客看,因为csdn的这篇图片我没上传。 可以转载,但请注明出处 我的博客—点击跳转 https://numb.run Angular是谷歌开发的一款开源的web前端框架,诞生于2009年,由Misko Hevery 等人创建,后为Google所收购。是一款优秀

    2024年02月02日
    浏览(45)
  • Angular:引领未来的前端框架

    Angular是一款由Google开发的强大前端框架,具有丰富的特性和卓越的性能。本文将介绍Angular的基本概念、特点、应用场景以及与其他框架的对比。 一、引言 随着Web应用程序的日益复杂,前端框架在开发过程中扮演着越来越重要的角色。Angular作为一款由Google主导的前端框架,

    2024年01月22日
    浏览(46)
  • 2023.07.07面试偏前端angular

    ==和===是JavaScript中的两个比较运算符,用于比较两个值的相等性。 ==是松散相等运算符,它会进行类型转换后再比较值是否相等。如果两个值的类型不同,==会尝试将它们转换为相同的类型,然后再进行比较。例如,1 == \\\'1\\\'会返回true,因为它们在进行比较之前会被转换为相同

    2024年02月13日
    浏览(41)
  • 前端Angular框架基础知识(一)

    1.1 数据绑定 数据驱动DOM:将组件 类 (.ts文件)中的数据显示在组件 模板 (.html文件)中,当类中的数据发生变化会自动同步到模板中. Angular中使用差值表达式进行数据绑定, {{ }}语法 1.2 属性绑定 1.2.1 普通属性 使用【属性名称】为元素绑定DOM对象属性 使用【attr.属性名称】为元

    2024年01月17日
    浏览(40)
  • angular简单介绍

    Angular是一个流行的开源Web应用程序框架,由Google开发和维护。它用于构建动态的单页应用程序(SPAs),基于TypeScript,它是JavaScript的超集。Angular遵循组件化架构,应用程序由可重用的组件组成,这些组件结合在一起创建用户界面。 以下是Angular的一些关键特性和概念: 1. 组

    2024年02月07日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包