Angular2学习笔记-组件及其选项介绍

组件是构成angular2应用的基本单元,angular应用就是由一棵组件树组成的。我们可以在组件的模板内容中调用其他的组件,并可以向该组件传递值以及响应该组件的事件(即组件的输入输出)。另外,组件继承自指令(Directive),也就是说组件其实是一种特殊的指令。

组件的实现

实现组件仅用实现一个类(这里都是用TypeScript实现),并使用@Component修饰符修饰该类,填写该修饰符必要的信息。
1.从angular核心包中引入Component修饰符
import { Component } from '@angular/core';
2.填写修饰符中的选项

@Component({
  selector: 'my-app',
  template: '<h1>My First Angular App</h1>'
})

selector:一个CSS选择器,声明后就能在其他模板或html中使用。
template:内联模板,如上。也能使用templateUrl,直接使用一个模板HTML文件

3.实现一个并导出一个类
export class AppComponent { }
以上只实现一个空类,并声明export。这样才能在模块中引入,被其他组件使用,或作为根组件。

完整代码(该组件没有任何实际作用,仅显示了一个标题):

import { Component } from '@angular/core';
@Component({
  selector: 'my-app',
  template: '<h1>My First Angular App</h1>'
})
export class AppComponent { }

修饰器中的选项

若需要组件实现一些更强大的功能,则需要对组件的一些选项进行声明,下面介绍一些目前接触到的选项,以后慢慢补充。

//sub component
import { Component, EventEmitter } from '@angular/core';

@Component({
  selector: 'sub-app',
  template: '<h2 (click)="hasclick()">{{ massage }}</h2>',
  inputs: ['massage'],
  outputs: ['outputText'],
  styles:[`
    h2{color:red}
  `],
})
export class SubComponent { 
    massage: string;
    outputText = new EventEmitter<string>();

    hasclick(){
        this.outputText.emit("massage been clicked");
    }
}

//跟组件
import { Component } from '@angular/core';
@Component({
  selector: 'my-app',
  template: `
  <h1>My First Angular App</h1>
  <sub-app massage="sub component" (outputText)="alert($event);"></sub-app>
  `
})
export class AppComponent { 
    alert(str: string){
        alert(str);
    }
}

以上代码定义了一个SubComponent类,该类接受一个message输入,并有个outputText的事件输出:

1.selector:用来标识组件的css选择器,建议加上自己的前缀,避免重复
2.inputs:属性名列表,用来绑定组件需要的输入。 。massage为该组件的一个属性,声明为一个输入inputs: ['massage'],这样在AppComponent组件中就能给message传递值。可以使用@Input修饰符来起到相同的效果,@Input('alias') property: type,alias为property的别名,给属性传入值时可以使用给别名。
3.outputs:属性名列表,暴露该组件包含的事件。angular应用是一棵组件树,inputs声明由父组件向子组件需要传递的信息,outputs则声明子组件向父组件传递的信息,该信息通过事件来。输出属性必须是一个EventEmitter类的实例,该实例通过调用emit方法来发出事件,代码为this.outputText.emit("massage been clicked");,则上面例子在标题在点击后将发出一个事件,父组件通过声明的属性(outputText)="alert($event);"进行监听,$event为emit发出的信息。同样也能使用@Output修饰符实现。
4.template/templateUrl:内联的HTML内容,或通过HTML模板引入
5.styles/styleUrls:样式数组,可以使用styles写内联样式,或使用stylesUrl引入样式文件。注意styles/styleUrls由数组组成,通常包含一个string就够了。

styles:[`
    h2{color:red}
`],

6.provides:注册服务提供商,通常用来声明组件中要使用的服务,这是angular依赖注入器所需要的配置。也可以中模块中声明,这样该模块中所有的组件都能使用。
7.animations:组件使用到的动画

声明组件中的其他一些选项

API中声名的其他一些选项,还没有实际用到,有些看英文还好理解些:

1.changeDetection:组件用到的变更检测策略,不填则采用的默认策略,在组件输入有变更或有事件触发时,会调用变更检测。可以声明为一种onpush策略,这里不介绍。
2.entryComponents:被动态插入到给组件视图中的组件列表
3.encapsulation:样式封装策略
4.host:宿主元素的样式、类的映射

  host: {
    'style': 'display: table; height: 100%; background-color: red',
    'class': 'myClass'
  }

5.exportAs:name under which the component instance is exported in a template,在用到表单部分是就会用到这个名字(ngModel,ngForm)。
6.interpolation:自定义的插值标记
7.queries:configure queries that can be injected into the component
8.viewProviders:list of providers available to this component and its view children
9.moduleId:ES/CommonJS module id of the file in which this component is defined

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 组件基础 组件用来包装特定的功能,应用程序的有序运行依赖于组件之间的协同工作。组件是angular应用的最小逻辑单...
    oWSQo阅读 1,394评论 0 0
  • 此文基于官方文档,里面部分例子有改动,加上了一些自己的理解 什么是组件? 组件(Component)是 Vue.j...
    陆志均阅读 3,860评论 5 14
  • 1.安装 可以简单地在页面引入Vue.js作为独立版本,Vue即被注册为全局变量,可以在页面使用了。 如果希望搭建...
    Awey阅读 11,087评论 4 129
  • 乘着假期,背上放置很久的单反,决定来一场说走就走的旅行…… 去了湖南大学,就一个感觉哇哦!好大! 第二站武陵源,四...
    无聊才是生活阅读 299评论 0 1
  • 【90天践行总结】+五组+徐海玲 尹煦+男+2012.03.08 第一个30天目标是培养孩子午睡或午休的好习惯。目...
    美丽人生Helen阅读 224评论 0 0