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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,607评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,047评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,496评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,405评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,400评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,479评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,883评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,535评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,743评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,544评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,612评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,309评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,881评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,891评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,136评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,783评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,316评论 2 342

推荐阅读更多精彩内容

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