Angular7创建项目、组件、服务以及服务的使用


Posted in Javascript onFebruary 19, 2019

三大前端项目就剩angular没学了,在网上找了几个教程,这里总结一下,方便以后用到时查阅

创建项目

首先安装cli工具

npm install -g @angular/cli

创建一个空项目, 有两处要选择的,一个是路由,我这里是要路由的,还有一个开发css的语言,我这里选择scss,就不截图了,选完后会自动通过yarn安装依赖,稍等一会就好了

ng new pybbs-front-angular

创建好了,运行 npm run start 或者 ng serve 启动服务,然后就可以在浏览器里打开 http://localhost:4200/ 地址查看启动后的首页了

创建组件

命令 ng g component user 执行完后,会在 src/app 目录下生成一个user的文件夹,里面有四个文件

如果想把组件都放在一个文件夹里管理,也可以在创建的时候加上一个文件夹名字,比如把所有的组件都放在 components 文件夹里,命令就是这样的 ng g component components/user

页面名 说明
user.component.html 组件模板文件
user.component.scss 组件的样式文件
user.component.spec.ts 组件测试文件
user.component.ts 组件文件

使用命令创建组件有个好处就是cli会自动把这个组件引入到 src/app/app.module.ts 文件里,这样直接在其它文件里使用 src/app/user/user.component.ts里定义的selector,一般这个名字都是 app-xxx 后面xxx就是这个模块的名字,比如这里的user模块,就是 app-user

生命周期

angular的生命周期有很多,看下下图

这里只介绍二个

方法 说明
ngOnInit 组件加载时初始化变量或者网络请求时代码写在这里面
ngAfterViewInit 如果想对页面进行dom操作,最好在这个方法里操作,这个方法是在页面dom元素都加载完成后才调用的

创建服务

命令 ng g service user 执行完后,cli会自动创建两个文件在 src/app/user 文件夹里

如果想把服务也都放在一个文件夹里管理,可以在命令上加上一个服务的文件夹名字,如 ng g service services/user

服务文件名 说明
user.service.ts 组件提供服务的主文件
user.service.spec.ts 组件提供服务文件的测试文件,写对服务测试的代码都放在这里面

服务创建好了之后,没有创建组件那么方便了,还需要自己配置一下,打开 src/app/app.component.ts 文件

在文件内引入,然后将服务注入到 providers 里

import { UserService } from './user/user.service';

@NgModule({
 providers: [
  UserService
 ]
})

首先添加一个服务 user.service.ts

import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders } from '@angular/common/http';
import { Observable } from 'rxjs';

@Injectable({
 providedIn: 'root'
})
export class TopicService {

 constructor(private http: HttpClient) { }

 fetchGithubApi() {
  return new Observable((observe) => {
   const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json' }) };
   this.http.get('https://api.github.com', httpOptions)
    .subscribe((data: any) => {
     observe.next(data.detail);
     // 如果有错误,通过 error() 方法将错误返回
     // observe.error(data.description);
    });
  });
 }
}

打开 user.component.ts 文件,使用这个服务里定义的方法,代码如下

引入服务文件,然后初始化,这里初始化有两种方式,一种 private userService: UserService = new UserService(),另一种是通过构造方法注入

import { Component, OnInit } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
import { UserService } from './user.service';

@Component({
 selector: 'app-user',
 templateUrl: './user.component.html',
 styleUrls: ['./user.component.scss']
})
export class UserComponent implements OnInit {

 constructor(
  private userService: UserService
 ) { }

 ngOnInit() {
  this.userService.fetchGithubApi()
   .subscribe(data => console.log(data), error => console.log(error));
 }

}

说明:上面例子中请求接口用的是 angular 内置好的 rxjs 模块,你也可以换成流行的 axios 或者其它的框架

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
懒就要懒到底——鼠标自动点击(含时间判断)
Feb 20 Javascript
JS中confirm,alert,prompt函数区别分析
Jan 17 Javascript
Extjs中通过Tree加载右侧TabPanel具体实现
May 05 Javascript
jquery easyui combox一些实用的小方法
Dec 25 Javascript
JS实现控制表格行内容垂直对齐的方法
Mar 30 Javascript
Javascript实现可旋转的圆圈实例代码
Aug 04 Javascript
jquery控制显示服务器生成的图片流
Aug 04 Javascript
jQuery实现输入框下拉列表树插件特效代码分享
Aug 27 Javascript
关于JS中match() 和 exec() 返回值和属性的测试
Mar 21 Javascript
原生js实现图片放大缩小计时器效果
Jan 20 Javascript
JavaScript使用Ajax上传文件的示例代码
Aug 10 Javascript
Vue CLI3创建项目部署到Tomcat 使用ngrok映射到外网
May 16 Javascript
小程序转发探索示例
Feb 19 #Javascript
JS异步执行结果获取的3种解决方式
Feb 19 #Javascript
jQuery AJAX与jQuery事件的分析讲解
Feb 18 #jQuery
基于node.js实现爬虫的讲解
Feb 18 #Javascript
简单实现vue中的依赖收集与响应的方法
Feb 18 #Javascript
vue实现的网易云音乐在线播放和下载功能案例
Feb 18 #Javascript
vue实现的微信机器人聊天功能案例【附源码下载】
Feb 18 #Javascript
You might like
Mysql的常用命令
2006/10/09 PHP
实战mysql导出中文乱码及phpmyadmin导入中文乱码的解决方法
2010/06/11 PHP
如何在Ubuntu下启动Apache的Rewrite功能
2013/07/05 PHP
PHP获取redis里不存在的6位随机数应用示例【设置24小时过时】
2017/06/07 PHP
JS request函数 用来获取url参数
2010/05/17 Javascript
js运动框架_包括图片的淡入淡出效果
2013/05/11 Javascript
js获取或设置当前窗口url参数的小例子
2013/10/14 Javascript
Windows系统中安装nodejs图文教程
2015/02/28 NodeJs
介绍JavaScript中Math.abs()方法的使用
2015/06/14 Javascript
有关文件上传 非ajax提交 得到后台数据问题
2016/10/12 Javascript
在Vue组件中获取全局的点击事件方法
2018/09/06 Javascript
对angularJs中2种自定义服务的实例讲解
2018/09/30 Javascript
layui 点击重置按钮, select 并没有被重置的解决方法
2019/09/03 Javascript
关于vue2强制刷新,解决页面不会重新渲染的问题
2019/10/29 Javascript
js中调用微信的扫描二维码功能的实现代码
2020/04/11 Javascript
vue循环中点击选中再点击取消(单选)的实现
2020/09/10 Javascript
Python多进程同步简单实现代码
2016/04/27 Python
pandas每次多Sheet写入文件的方法
2018/12/10 Python
python图像处理入门(一)
2019/04/04 Python
python读取目录下所有的jpg文件,并显示第一张图片的示例
2019/06/13 Python
Pytorch释放显存占用方式
2020/01/13 Python
HTML5如何实现元素拖拽
2016/03/11 HTML / CSS
比驿:全球酒店比价网
2018/06/20 全球购物
泰国排名第一的家居用品中心:HomePro
2020/11/18 全球购物
大学生简历中个人的自我评价
2013/10/06 职场文书
跟单文员岗位职责
2014/01/03 职场文书
入党积极分子自我鉴定
2014/02/18 职场文书
经济担保书范文
2014/04/02 职场文书
《故都的秋》教学反思
2014/04/15 职场文书
入党个人总结范文
2015/03/02 职场文书
讲座通知范文
2015/04/23 职场文书
2015年第十五个全民国防教育日宣传活动方案
2015/05/06 职场文书
学校2016年圣诞节活动总结
2016/03/31 职场文书
学校就业保障协议书
2019/06/24 职场文书
MySQL令人咋舌的隐式转换
2021/04/05 MySQL
Web应用开发TypeScript使用详解
2022/05/25 Javascript