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 相关文章推荐
jquery 页眉单行信息滚动显示实现思路及代码
Jun 26 Javascript
javascript随机显示背景图片的方法
Jun 18 Javascript
jquery实现红色竖向多级向右展开的导航菜单效果
Aug 31 Javascript
JavaScript中数组的合并以及排序实现示例
Oct 24 Javascript
jQuery Chart图表制作组件Highcharts用法详解
Jun 01 Javascript
Ajax跨域实现代码(后台jsp)
Jan 21 Javascript
jquery实时获取时间的简单实例
Jan 26 Javascript
JS继承与闭包及JS实现继承的三种方式
Oct 15 Javascript
Angular搜索场景中使用rxjs的操作符处理思路
May 30 Javascript
利用JavaScript的Map提升性能的方法详解
Aug 14 Javascript
解决在Vue中使用axios用form表单出现的问题
Oct 30 Javascript
vue2.* element tabs tab-pane 动态加载组件操作
Jul 19 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
PHP计划任务、定时执行任务的实现代码
2011/04/23 PHP
php弹出对话框实现重定向代码
2014/01/23 PHP
Jquery Ajax学习实例3 向WebService发出请求,调用方法返回数据
2010/03/16 Javascript
js检查页面上有无重复id的实现代码
2013/07/17 Javascript
javascript实现PC网页里的拖拽效果
2016/03/14 Javascript
Jquery插件仿百度搜索关键字自动匹配功能
2016/05/11 Javascript
jQuery中on绑定事件后引发的事件冒泡问题如何解决
2016/05/25 Javascript
JavaScript中的boolean布尔值使用学习及相关技巧讲解
2016/05/26 Javascript
JS函数arguments数组获得实际传参数个数的实现方法
2016/05/28 Javascript
ES6新特征数字、数组、字符串
2016/10/01 Javascript
详解Html a标签中href和onclick用法、区别、优先级别
2017/01/16 Javascript
Angularjs为ng-click事件传递参数
2017/06/15 Javascript
基于vue的短信验证码倒计时demo
2017/09/13 Javascript
使用Dropzone.js上传的示例代码
2017/10/10 Javascript
微信小程序Echarts图表组件使用方法详解
2019/06/25 Javascript
在Vue中使用this.$store或者是$route一直报错的解决
2019/11/08 Javascript
vue实现验证用户名是否可用
2021/01/20 Vue.js
python中查找excel某一列的重复数据 剔除之后打印
2013/02/10 Python
分析python切片原理和方法
2017/12/19 Python
python做量化投资系列之比特币初始配置
2018/01/23 Python
Tensorflow卷积神经网络实例进阶
2018/05/24 Python
详解Python3序列赋值、序列解包
2019/05/14 Python
python算法与数据结构之单链表的实现代码
2019/06/27 Python
tensorflow获取预训练模型某层参数并赋值到当前网络指定层方式
2020/01/24 Python
python tqdm库的使用
2020/11/30 Python
什么是Smarty变量操作符?如何使用Smarty变量操作符
2014/07/18 面试题
Linux面试经常问的文件系统操作命令
2016/10/04 面试题
优秀毕业生求职推荐信范文
2013/11/21 职场文书
《千年梦圆在今朝》教学反思
2014/02/24 职场文书
2014年党务公开实施方案
2014/02/27 职场文书
赔偿协议书范本
2014/04/15 职场文书
协议书模板
2014/04/23 职场文书
志愿者活动总结范文
2014/04/26 职场文书
县政府领导班子“四风”方面突出问题整改措施
2014/09/23 职场文书
关于迟到的检讨书
2015/05/06 职场文书
go结构体嵌套的切片数组操作
2021/04/28 Golang