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 相关文章推荐
InnerHtml和InnerText的区别分析
Mar 13 Javascript
定义JavaScript二维数组采用定义数组的数组来实现
Dec 09 Javascript
JavaScript保留两位小数的2个自定义函数
May 05 Javascript
实例详解JSON数据格式及json格式数据域字符串相互转换
Jan 07 Javascript
jQuery加密密码到cookie的实现代码
Apr 18 jQuery
jquery中each循环的简单回滚操作
May 05 jQuery
JS运动特效之同时运动实现方法分析
Jan 24 Javascript
AngularJs用户输入动态模板XSS攻击示例详解
Apr 21 Javascript
ES6中的class是如何实现的(附Babel编译的ES5代码详解)
May 17 Javascript
中高级前端必须了解的JS中的内存管理(推荐)
Jul 04 Javascript
详解mpvue实现对苹果X安全区域的适配
Jul 31 Javascript
微信小程序通过一个json实现分享朋友圈图片
Sep 03 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
PhpMyAdmin出现export.php Missing parameter: what /export_type错误解决方法
2012/08/09 PHP
PHP 自定义错误处理函数trigger_error()
2013/03/26 PHP
centos7上编译安装php7以php-fpm方式连接apache
2018/11/08 PHP
JavaScript 闭包在封装函数时的简单分析
2009/11/28 Javascript
javascript中的遍历for in 以及with的用法
2014/12/22 Javascript
jQuery中addClass()方法用法实例
2015/01/05 Javascript
JS实现可缩放、拖动、关闭和最小化的浮动窗口完整实例
2015/03/04 Javascript
利用AJAX实现WordPress中的文章列表及评论的分页功能
2016/05/17 Javascript
webpack打包单页面如何引用的js
2017/06/07 Javascript
Axios学习笔记之使用方法教程
2017/07/21 Javascript
javascript函数的节流[throttle]与防抖[debounce]
2017/11/15 Javascript
vue watch普通监听和深度监听实例详解(数组和对象)
2018/08/16 Javascript
jQuery操作元素的内容和样式完整实例分析
2020/01/10 jQuery
[01:48]2018DOTA2亚洲邀请赛主赛事第二日五佳镜头 VG完美团战逆转TNC
2018/04/05 DOTA
python字符串替换的2种方法
2014/11/30 Python
Python多进程multiprocessing用法实例分析
2017/08/18 Python
Python 多核并行计算的示例代码
2017/11/07 Python
Flask之flask-script模块使用
2018/07/26 Python
python读取txt文件,去掉空格计算每行长度的方法
2018/12/20 Python
python批量读取文件名并写入txt文件中
2020/09/05 Python
python实现把二维列表变为一维列表的方法分析
2019/10/08 Python
Python3.x+迅雷x 自动下载高分电影的实现方法
2020/01/12 Python
CSS Grid布局教程之浏览器开启CSS Grid Layout汇总
2014/12/30 HTML / CSS
Crocs美国官方网站:卡骆驰洞洞鞋
2017/08/04 全球购物
匡威意大利官方商店 :Converse意大利
2018/11/27 全球购物
写出程序把一个链表中的接点顺序倒排
2014/04/28 面试题
编写函数,将一个3*3矩阵转置
2013/10/09 面试题
计算机专业推荐信范文
2013/11/27 职场文书
公益广告宣传方案
2014/02/28 职场文书
升职自荐信怎么写
2015/03/05 职场文书
员工家属慰问信
2015/03/24 职场文书
催款函怎么写
2015/06/24 职场文书
汤姆叔叔的小屋读书笔记
2015/06/30 职场文书
2015质检员个人年终工作总结
2015/10/23 职场文书
2016年党课培训学习心得体会
2016/01/07 职场文书
Windows 64位 安装 mysql 8.0.28 图文教程
2022/04/19 MySQL