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 相关文章推荐
编写跨浏览器的javascript代码必备[js多浏览器兼容写法]
Oct 29 Javascript
JS 自定义函数缺省值的设置方法
May 05 Javascript
autoIMG 基于jquery的图片自适应插件代码
Mar 12 Javascript
AspNet中使用JQuery上传插件Uploadify详解
May 20 Javascript
JS动态增删表格行的方法
Mar 03 Javascript
深入理解Vue.js源码之事件机制
Sep 27 Javascript
Vue props用法详解(小结)
Jul 03 Javascript
vue 点击按钮增加一行的方法
Sep 07 Javascript
详解Ubuntu安装angular-cli遇到的坑
Sep 08 Javascript
详解微信小程序-canvas绘制文字实现自动换行
Apr 26 Javascript
js正则匹配多个全部数据问题
Dec 20 Javascript
原生js实现购物车
Sep 23 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中session_unset与session_destroy的区别分析
2011/06/16 PHP
php自动提交表单的方法(基于fsockopen与curl)
2016/05/09 PHP
php慢查询日志和错误日志使用详解
2021/02/27 PHP
jQuery 源码分析笔记(3) Deferred机制
2011/06/19 Javascript
jQuery之日期选择器的深入解析
2013/06/19 Javascript
让javascript加载速度倍增的方法(解决JS加载速度慢的问题)
2014/12/12 Javascript
超级简单的jquery操作表格方法
2014/12/15 Javascript
简单介绍JavaScript的变量和数据类型
2015/06/03 Javascript
JQuery fileupload插件实现文件上传功能
2016/03/18 Javascript
AngularJS使用ng-repeat指令实现下拉框
2016/08/23 Javascript
JavaScript toUpperCase()方法使用详解
2016/08/26 Javascript
详解JS: reduce方法实现 webpack多文件入口
2017/02/14 Javascript
Vue 2.X的状态管理vuex记录详解
2017/03/23 Javascript
JS实现点击Radio动态更新table数据
2017/07/18 Javascript
JS库中的Particles.js在vue上的运用案例分析
2017/09/13 Javascript
Vue双向绑定实现原理与方法详解
2020/05/07 Javascript
[35:44]2014 DOTA2华西杯精英邀请赛 5 24 iG VS VG
2014/05/26 DOTA
[44:43]完美世界DOTA2联赛决赛日 FTD vs GXR 第一场 11.08
2020/11/11 DOTA
[01:03:41]DOTA2-DPC中国联赛 正赛 Dynasty vs XG BO3 第三场 2月2日
2021/03/11 DOTA
python实现mysql的单引号字符串过滤方法
2015/11/14 Python
Python编程实战之Oracle数据库操作示例
2017/06/21 Python
简单的python协同过滤程序实例代码
2018/01/31 Python
Python数据预处理之数据规范化(归一化)示例
2019/01/08 Python
对Python 获取类的成员变量及临时变量的方法详解
2019/01/22 Python
django-rest-framework解析请求参数过程详解
2019/07/18 Python
PyQt5 文本输入框自动补全QLineEdit的实现示例
2020/05/13 Python
雷曼兄弟的五金店:Lehman’s Hardware Store
2019/04/10 全球购物
英国老牌潮鞋店:Offspring
2019/08/19 全球购物
俄罗斯香水和化妆品在线商店:Aroma-butik
2020/02/28 全球购物
xxx同志考察材料
2014/02/07 职场文书
生产厂长岗位职责
2014/02/21 职场文书
毕业晚会主持词
2014/03/24 职场文书
给校长的一封检讨书
2014/09/20 职场文书
创先争优宣传标语
2014/10/08 职场文书
HTML中的表单Form实现居中效果
2021/05/25 HTML / CSS
html中相对位置与绝对位置的具体使用
2022/05/15 HTML / CSS