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 相关文章推荐
写的htc的数据表格
Jan 20 Javascript
javascript基本语法分析说明
Jun 15 Javascript
Jquery插件写法笔记整理
Sep 06 Javascript
web的各种前端打印方法之jquery打印插件jqprint实现网页打印
Jan 09 Javascript
js调试工具console.log()方法查看js代码的执行情况
Aug 08 Javascript
浅谈JavaScript Date日期和时间对象
Dec 29 Javascript
Grunt入门教程(自动任务运行器)
Aug 06 Javascript
jQuery获取radio选中项的值实例
Jun 18 Javascript
Angular 4依赖注入学习教程之ValueProvider的使用(七)
Jun 04 Javascript
vue中遇到的坑之变化检测问题(数组相关)
Oct 13 Javascript
基于element-ui对话框el-dialog初始化的校验问题解决
Sep 11 Javascript
在vue中获取wangeditor的html和text的操作
Oct 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
smarty静态实验表明,网络上是错的~呵呵
2006/11/25 PHP
php查看session内容的函数
2008/08/27 PHP
php+jQuery.uploadify实现文件上传教程
2014/12/26 PHP
PHP获取表单数据与HTML嵌入PHP脚本的实现
2017/02/09 PHP
JavaScript 工具库 Cloudgamer JavaScript Library v0.1 发布
2009/10/29 Javascript
jquery 添加节点的几种方法介绍
2013/09/04 Javascript
纯Javascript实现Windows 8 Metro风格实现
2013/10/15 Javascript
Js参数值中含有单引号或双引号问题的解决方法
2013/11/06 Javascript
JQuery中两个ul标签的li互相移动实现方法
2015/05/18 Javascript
jquery衣服颜色选取插件效果代码分享
2015/08/28 Javascript
基于nodejs+express(4.x+)实现文件上传功能
2015/11/23 NodeJs
认识Knockout及如何使用Knockout绑定上下文
2015/12/25 Javascript
第三篇Bootstrap网格基础
2016/06/21 Javascript
JS生成一维码(条形码)功能示例
2017/01/19 Javascript
js单页hash路由原理与应用实战详解
2017/08/14 Javascript
redux中间件之redux-thunk的具体使用
2018/04/17 Javascript
Linux Centos7.2下安装nodejs&npm配置全局路径的教程
2018/05/15 NodeJs
浅谈angularJs函数的使用方法(大小写转换,拷贝,扩充对象)
2018/10/08 Javascript
微信小程序如何修改radio和checkbox的默认样式和图标
2019/07/24 Javascript
一篇超完整的Vue新手入门指导教程
2020/11/18 Vue.js
python 七种邮件内容发送方法实例
2014/04/22 Python
tf.truncated_normal与tf.random_normal的详细用法
2018/03/05 Python
Django框架模型简单介绍与使用分析
2019/07/18 Python
Python绘图实现显示中文
2019/12/04 Python
Django 实现对已存在的model进行更改
2020/03/28 Python
常用的10个Python实用小技巧
2020/08/10 Python
台湾租车首选品牌:IWS艾维士租车
2019/05/03 全球购物
台湾7-ELEVEN线上购物中心:7-11
2021/01/21 全球购物
车间机修工岗位职责
2014/02/28 职场文书
共产党员公开承诺书
2014/03/25 职场文书
房地产资料员岗位职责
2014/07/02 职场文书
初中优秀教师事迹材料
2014/08/18 职场文书
党的群众路线对照检查材料
2014/09/22 职场文书
企业年检委托书范本
2014/10/14 职场文书
会计岗位工作总结
2015/08/12 职场文书
启迪人心的励志语录:脾气永远不要大于本事
2020/01/02 职场文书