Angular7教程-03-Angular常用操作(上)
本节来介绍angular中的操作以及TypeScript语法的简单介绍。关于TypeScript语法的更为详细的内容,打算在整个angular教程结束后再单独介绍。
0. 安装所需要的插件及配置插件
安装bootstrap
进入项目目录,使用以下命令安装:
cd media
npm install bootstrap --save
然后在angular.json配置文件中添加样式的引用。
"styles": [
"src/styles.css",
"./node_modules/bootstrap/dist/css/bootstrap.min.css"
]
安装jquery
cd media
npm install jquery --save
在angular.json中引入jquery:
"scripts": ["./node_modules/jquery/dist/jquery.min.js"]
1. angular中新建一个组件
现在我们在项目中新建一个名称为article的组件,由于手动创建组件比较麻烦,所以我们使用angular提供的angular cli工具来创建(手动创建的方法附在文末,不感兴趣的童鞋不用看),命令如下:
ng generate component article
也可使用命令的简写方式:
ng g c article
src/app目录下会多出一个article文件夹,里面angular cli工具帮我们创建的4个文件,article.component.css, article.component.html,article.component.spec.ts, article.component.ts。同时,还会更新ng.modules.ts这个文件。
2. 引用组件
在根组件的模板文件app.component.html中加入<app-article></app-article>即可引用我们刚刚新建的article组件,app.component.html代码:
<div style="text-align:center">
<h1>
Welcome to {{ title }}!
</h1>
</div>
<!-- 下面是对article组件的引用 -->
<app-article></app-article>
显示效果如下:

表明我们的article组件引用成功。
3. 组件的嵌套引用
新建一个operator组件,然后在article组件中引入operator。article.component.html模板文件内容:
<p>
article works!
</p>
<!-- 引用operator组件 -->
<app-operator></app-operator>
页面刷新后显示如下:

引用关系如下: 根组件(app)引用了article,article又引用了operator.
4.组件选择器的其它定义方式
组件选择器的定义还可以通过属性和类的方法来定义,如下所示:
@Component({
//selector: 'app-article',
//selector: '[app-article]', //属性方式
selector: '.app-article',//类方式
templateUrl: './article.component.html',
styleUrls: ['./article.component.css']
})
则引用组件的方式也需要发生改变:
<!--属性方式来引用-->
<div app-article></div>
<!--类方式引用-->
<div class="app-article"></div>
5. 数据模型定义以及数据绑定
将业务逻辑中的数据通过插值表达式显示在模板文件,即html页面上,或者将html页面上的事件传输到业务逻辑。
插值表达式
首先我们在article页面上添加需要显示的内容:
<p>
本篇文章的ID是{{id}},标题是{{title}}
</p>
同时我们在article.component.ts中定义id和title。
export class ArticleComponent implements OnInit {
id:number = 1;
title:string = "第一篇文章";
}
页面显示效果如下:

属性绑定
在article.component.html中定义如下内容:
文章ID:<input type="text" [value]="id" >
文章标题:<input type="text" [value]="title">
页面显示效果如下:

插值运算
article.component.html代码:
{{ 5 + 3}}, {{ "a" + "b"}}
页面显示效果:

事件绑定
article.component.ts中设置一个状态,然后新建一个函数供页面调用,在函数中改变这个状态。
export class ArticleComponent implements OnInit {
status = "隐藏状态";
changeStatus(){
this.status = "显示状态";
}
}
article.component.html中定义一个按钮并绑定changeStatus()这个函数。
{{status}}
<button class="btn btn-info btn-sm" (click)="changeStatus()">改变状态</button>
按钮单击前和单击后页面显示效果分别如下:


事件绑定传递数据
现在我们实现当我们在input框中输入内容的时候,内容同时显示在输入框的下面,article.component.html文件内容:
<input type="text" (keyup) = "updateContent($event)"><br>
{{content}}
article.component.ts中共定义变量以及函数:
content = "";
updateContent(event:any){
this.content = event.target.value;
}
页面显示效果:

延伸阅读: 手动创建组件
- 组件创建
在app目录下新建一个文件夹,名字叫article.在article目录下新建article.componnent.ts的空白文件,注意文件名字的命名,article是组件名称,component表示类型,即组件,.ts则是文件的后缀名,文件内容如下所示:
import {Component} from '@angular/core';
@Component({
selector: 'app-article',
templateUrl:'./article.component.html'
})
export class ArticleComponent{
}
文件内容说明:
第一行从@angular/core中引入Component装饰器,然后建立一个普通的类ArticleComponent,并用@Component装饰它,在@Component中,分别定义组件的选择器名称和模板文件。
然后在article中新建模板文件article.component.html文件内容与普通html文件无异。
- 组件的注册
打开app目录下的app.modules.ts文件,文件内容如下:
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
AppRoutingModule
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
文件内容的说明:
- 上面import部分是模块以及装饰器的引入。
- declarations部分是声明模块的内部成员。
- imports部分是导入其它模块。
- providers指定应用程序根级别需要使用的service。
- bootstrap是app启动的根组件。
- export控制将那些内部成员暴露给外部使用。
修改文件内容,添加import {ArticleComponent} from './article/article.component';将模块引入,然后在declarations中添加ArticleComponent. 修改后的内容如下所示:
//...省略部分代码...
import { AppComponent } from './app.component';
import {ArticleComponent} from './article/article.component'; //step1 引入
@NgModule({
declarations: [
AppComponent,
ArticleComponent //step2 声明
]
})
//...省略部分代码...
Angular7教程-03-Angular常用操作(上)的更多相关文章
- python对redis的常用操作 上 (对列表、字符串、散列结构操作)
这里的一切讨论均基于python的redis-py库. 安装使用: pip install redis 然后去获取一个redis客户端: redis_conn = redis.Redis(host=R ...
- Angular7教程-05-搭建项目环境
1. 本节说明 本节以及后面的内容我们将会通过搭建一个简单的博客程序来对angular进行介绍,项目使用前端框架是bootstrap.版本v3.3.7,另外需要安装jquery.关于bootstrap ...
- Angular7教程-06-页面与数据交互
1. 本节说明 本节的内容会在上期搭建的框架基础上进行数据的填充,顺便回顾之前介绍过的插值表达式,属性绑定等知识,本节的数据只是在组件中模拟数据,后面会有专门的章节讲解如何从服务器获取数据. 2. 轮 ...
- Angular7教程-04-Angular常用操作(下)
6. 数据双向绑定 视图和数据,只要一方发生变化,另一方跟着变化. 好处是不需要在代码中手动更新视图,简化开发,增加代码内聚性,代码可读性更强. 缺点是当绑定的数据层次深.数据量大时,会影响性能. 双 ...
- 屌炸天实战 MySQL 系列教程(二) 史上最屌、你不知道的数据库操作
此篇写MySQL中最基础,也是最重要的操作! 第一篇:屌炸天实战 MySQL 系列教程(一) 生产标准线上环境安装配置案例及棘手问题解决 第二篇:屌炸天实战 MySQL 系列教程(二) 史上最屌.你不 ...
- String 类上的常用操作
java 中String 类上的常用操作: 首先创建对象 String line = new String("String demo"); String line2 = new ...
- 版本控制工具——Git常用操作(上)
本文由云+社区发表 作者:工程师小熊 摘要:用了很久的Git和svn,由于总是眼高手低,没能静下心来写这些程序员日常开发最常用的知识点.现在准备开一个专题,专门来总结一下版本控制工具,让我们从git开 ...
- SFTP上传下载文件、文件夹常用操作
SFTP上传下载文件.文件夹常用操作 1.查看上传下载目录lpwd 2.改变上传和下载的目录(例如D盘):lcd d:/ 3.查看当前路径pwd 4.下载文件(例如我要将服务器上tomcat的日志文 ...
- ubuntu的学习教程(常用操作)
摘要 最近在学习linux,把自己学习过程中遇到的常用操作以及一些有助于理解的内容记录下来.我主要用的是ubuntu系统 命令提示符 '~' 这个是指用户的家目录,用户分为root用户和普通用户,ro ...
随机推荐
- kali 的端口扫描nmap
输入“nmap+空格+“-O”+空格+IP地址或域名. 扫描所有TCP端口:输入“nmap+空格+“-sT”+空格+IP地址或域名” 扫描所有开放的UDP端口:输入“nmap+空格+”-sP”+空格+ ...
- OpenCV获取与设置像素点的值的几个方法
Title: OpenCV OpenCV像素值的获取与设置 Fn 1 : 使用 Mat 中对矩阵元素的地址定位的知识 (参考博文:OpenCV中对Mat里面depth,dims,channels,st ...
- weex 数据绑定,动态控制组件的显示内容及样式
无论的原生开发还是weex开发,经常会需要我们对一些组件/控件动态赋值,在原生中,我们大家都知道,对控件setText就可以了,那么在weex中呢,我们需要怎么做呢,其实很简单,几行代码就可以搞定!首 ...
- SSM 框架-03-MyEclipse+Tomcat+MAVEN+SVN项目完整环境搭建
SSM 框架-03-MyEclipse+Tomcat+MAVEN+SVN项目完整环境搭建 如果你是使用 Eclipse 你需要先安装 MyEclipse,请参考:SSM 框架-02-MyEclipse ...
- Week2——XML
一.什么是XML? XML是可扩展标记性语言,类似于HTML,被设计为传输和存储数据,其焦点是数据的内容.XML的标签没有被预定义,用户就需要自行定义标签,也可随意定义标签.XML 允许创作者定义自己 ...
- C#跨线程调用窗体控件(比如TextBox)引发的线程安全问题
如何:对 Windows 窗体控件进行线程安全调用 访问 Windows 窗体控件本质上不是线程安全的. 如果有两个或多个线程操作某一控件的状态,则可能会迫使该控件进入一种不一致的状态. 还可能会出现 ...
- libcrypto.so.10内容丢失导致sshd无法运行
今天启动虚拟机,ssh服务起不来,提示如下: Starting sshd: /usr/sbin/sshd: error while loading shared libraries: libcrypt ...
- Effective C++(1-2) 编译器替换预处理器
1 C++最主要的四部分: C Object-Oriented C++: 面向对象 Template C++:泛型编程 STL C++高效编程守则视状况而变化,取决于你使用C++的哪一部分. 2 尽量 ...
- 小米OJ 有多少个等差数列
题目链接 https://code.mi.com/problem/list/view?id=20 代码 #include <bits/stdc++.h> using namespace s ...
- 对于over-posting的防御
over-posting简单的说就是指用户通过猜测等手段得知了后端数据Model的属性名称,在数据更新或添加的时候提交了本不应该允许用户更改的数据库字段,并且在服务器端因为没有进行防御而将恶意提交的数 ...