[转]【Angular4】基础(二):创建组件 Component
本文转自:https://blog.csdn.net/u013451157/article/details/79445138
创建一个组件很简单,比如我们创建一个 card 组件:
ng g c card
- 1
这里我使用的是 Angular CLI 脚手架,当然你要是不觉得麻烦,也可以一个个文件建。
不过!要提醒一点,当使用 ng
创建时,会将创建的组件、服务这些自动添加到 app/app.module.ts
中,如果你是手动创建的话一定要记得在模块中写入你创建的。
现在来看下 app/card/card.component.ts
:
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-card',
templateUrl: './card.component.html',
styleUrls: ['./card.component.scss']
})
export class CardComponent implements OnInit {
constructor() { }
ngOnInit() {}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
@Component()
是一个装饰器,唯一需要的参数是一个元数据对象。
参数说明:
- selector:组件选择器名称,一般采取横杠方式
- templateUrl:模板文件路径
styleUrls:样式文件路径
当然,如果你使用内联模板和内联样式的话,可以将templateUrl
换为template
,styleUrls
换成styles
template:模板字符串
- styles:样式数组
export class CardComponent implements OnInit { }
是一个控制器
现在我们动手做一个小 demo
创建一个 demo-component
组件,用来放置实例
比如在 app/demo/demo-component.component.html
中直接使用:
<app-card></app-card>
- 1
你可能会问为什么是 app-card
,之前创建的不是 card
组件么?
这里需要看你的配置文件 .angular-cli.json
,一般默认添加 app
的前缀
所以你创建的 card
组件的 selector
就变成了 app-card
。
这时你启动项目后会发现页面中显示 card works!(当你用 ng
创建组件后都会自动在 template 中添加 “组件名 works!”)
若没有显示这预期的效果,就去检查下 app/app.component.html
中是否为
<app-demo-component></app-demo-component>
- 1
这里暂停下来梳理下思路,
index.html
为整个应用的入口文件
你会发现 body
中嵌入了 <app-root></app-root>
而这个组件也就是根组件 app.component.ts
为了方便管理我们就将所有的实例都放置在 app.component.html
中,这里只有一个实例
<app-demo-component></app-demo-component>
- 1
在 demo-component.html
中实例化的是一个 card
组件,内容为:
<app-card></app-card>
- 1
好了!想着思路应该也梳理清楚了,那么思考下如何 动态嵌入内容 呢?
在 app/demo/demo-component.html
中修改如下:
<app-card>
<h3>卡头</h3>
我是卡的内容
</app-card>
- 1
- 2
- 3
- 4
当打开页面时发现没有出现动态嵌入的内容?别慌~
// app/card/card.component.html
<ng-content></ng-content>
- 1
- 2
- 3
上面的代码表示将组件内部的内容插入指定位置,ng-content
还有一个特别的属性,值可以是”element”, #id”, “.class”, “[name=value]”等CSS选择器,比如我们可以这样:
// card.component.html
<ng-content selector="h3"></ng-content>
- 1
- 2
- 3
上面的代码意思是将包含h3的内容插入指定位置。
模板ts文件说明
import {BrowserModule} from '@angular/platform-browser';
import {NgModule} from '@angular/core';
import {AppComponent} from './app.component';
import {FormsModule} from '@angular/forms';
import {HttpModule} from '@angular/http';
@NgModule({
declarations: [ // 声明在该模块中有哪些东西(组件、指令、管道)
AppComponent
],
imports: [ // 声明该模块需要正常运转时需要用到哪些模块(即:该模块依赖哪些其它模块)
BrowserModule,
FormsModule,
HttpModule
],
providers: [], // 声明模块中的服务
bootstrap: [AppComponent] // 声明该模块的主组件
})
export class AppModule {
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
关于 moduleId(Angular2 与 Angular4区别)
上述创建的组件是用 Angular4,默认配置了 moduleId。
这里主要说下 Angular2 中的 moduleId。
没有module.id:
@Component({
selector: 'my-component',
templateUrl: 'app/components/my.component.html', <- Starts from base path
styleUrls: ['app/components/my.component.css'] <- Starts from base path
})
- 1
- 2
- 3
- 4
- 5
- 6
使用module.id:
tsconfig.json:
{
"compilerOptions": {
"module": "commonjs", <- need to change this if you want to use module.id property
...
@Component({
moduleId: module.id,
selector: 'my-component',
templateUrl: 'my.component.html', <- relative to the components current path
styleUrls: ['my.component.css'] <- relative to the components current path
})
[转]【Angular4】基础(二):创建组件 Component的更多相关文章
- vue(基础二)_组件,过滤器,具名插槽
一.前言 主要包括: 1.组件(全局组件和局部组件) 2.父组件和子组件之间的通信(单层) 3.插槽和具名插槽 ...
- Android 基础 二 四大组件 Activity
Activity Intent IntentFilter 一理论概述 一. Activity 用来提供一个能让用户操作并与之交互的界面. 1.1 启动 startActivity(Intent int ...
- JavaScript 基础(二) - 创建 function 对象的方法, String对象, Array对象
创建 function 对象的两种方法: 方式一(推荐) function func1(){ alert(123); return 8 } var ret = func1() alert(ret) 方 ...
- MySQL 基础二 创建表格
1.界面创建 2.SQL创建 教程地址:http://blog.csdn.net/brucexia/article/details/53738596 提供学习视频下载 链接:http://pan.ba ...
- react 创建组件 (二)component
因为ES6对类和继承有语法级别的支持,所以用ES6创建组件的方式更加优雅,下面是示例: import React from 'react'; class Greeting extends React. ...
- Angular4.x 创建组件|绑定数据|绑定属性|数据循环|条件判断|事件|表单处理|双向数据绑定
Angular4.x 创建组件|绑定数据|绑定属性|数据循环|条件判断|事件|表单处理|双向数据绑定 创建 angular 组件 https://github.com/angular/angular- ...
- Angular4.x 安装|创建项目|目录结构|创建组件
Angular4.x 安装|创建项目|目录结构|创建组件 安装最新版本的 nodejs node.js 官网:https://nodejs.org/zh-cn/ 去官网下载 node.js,下一步下一 ...
- vue组件基础之创建与使用
一.创建组件 <script src="vue.js"></script> <!--引入vue.js文件--> <div id=" ...
- Angular4.0用命令行创建组件服务出错
之前使用cnpm创建的angular4.0项目,由于cnpm下载的node_modules资源经常会有部分缺失,所以在用命令行创建模板.服务的时候会报错: Error: ELOOP: too many ...
随机推荐
- Chapter3_操作符_关系操作符
java中的关系操作符有等于“=”,不等于“!=”,大于“>”,小于“<”,大于等于“≥”,小于等于“≤”等.这些都不再赘述了,有一个有意思的点是关于等价性的讨论. 在java中测试两个对 ...
- UVa 11728 Alternate Task (枚举)
题意:给定一个 n,求一个最大正整数 N 使得 N 的所有正因数和等于 n. 析:对于任何数一个 n,它的所有正因子都是大于等于本身的,因为 n 本身就是自己的正因数,这样的就可以直接暴力了,答案肯定 ...
- youtube-dl 安装和用法
以windows为例 下载python2最新版本并安装,选择添加到PATH 下载ffmpeg最新版本并解压,在控制面板->高级系统设置->环境变量->PATH里添加解压之后的bin文 ...
- Struts2学习第三天——保存登陆信息及数据校验
在JSP中服务器端保存数据的作用域通常有request.session.application,它们对应的Servlet API分别是HttpServletRquerst.HttpSession.Se ...
- 跨域ajax问题
1. Intro 在用ajax请求时,请求的域名和所在域名不同,会出现跨域问题导致请求失败. 复杂请求: 条件: .请求方式:HEAD.GET.POST .请求头信息: Accept Accept-L ...
- C#情怀与未来
C#情怀与未来,怨天尤人还是抓住机会,能否跟上dnc新时代浪潮? 经常看到有.NET圈子在讨论是否应该转其它语言 C#情怀是一方面,如果觉得C#未来没前途,光靠情怀是撑不住的, 建议对C#未来 ...
- Word中带圈数字
写论文时常常要求输入带圈数字,先在Word中输入代码,选中代码后按Alt+X(然后再粘贴到Excel中) 符号 代码⓪ 24ea① 2460② 2461③ 2462④ 2463⑤ 2464⑥ 2465 ...
- java基础要点总结
无意间看到youtube上的一组java基础的视频,顺便做了笔记,整理如下: 出处: 作者:Edward Shi 视频链接:https://www.youtube.com/watch?v=IQE9jH ...
- WeexSDK之注册Handlers
先看代码: + (void)_registerDefaultHandlers { [self registerHandler:[WXResourceRequestHandlerDefaultImpl ...
- WITH RECOMPILE和OPTION(RECOMPILE)区别仅仅是存储过程级重编译和SQL语句级重编译吗
在考虑重编译T-SQL(或者存储过程)的时候,有两种方式可以实现强制重编译(前提是忽略导致重编译的其他因素的情况下,比如重建索引,更新统计信息等等), 一是基于WITH RECOMPILE的存储过程级 ...