Angular cli 组件和服务的创建, 父传子,子传父,服务的简单使用
1:Angular cli 创建组件component
ng g component components\right ng g c wave 简写 需要定位到根路径下即可创建组件 Could not find an NgModule. Use the skip-import option to skip importing in NgModule.
PS C:\myAngulrDemos\20240428demo\mydemo01\src> cd ..
PS C:\myAngulrDemos\20240428demo\mydemo01> ng g component components\mynews
CREATE src/app/components/mynews/mynews.component.html (21 bytes)
CREATE src/app/components/mynews/mynews.component.spec.ts (626 bytes)
CREATE src/app/components/mynews/mynews.component.ts (275 bytes)
CREATE src/app/components/mynews/mynews.component.css (0 bytes)
UPDATE src/app/app.module.ts (486 bytes)
PS C:\myAngulrDemos\20240428demo\mydemo01>
2:Angular cli 创建服务 service
ng g service services\mydata
在Angular中,服务是一种可重用的、负责特定任务的独立功能单元,比如获取数据、分享数据或者处理业务逻辑等。下面是如何创建和使用服务的步骤,以Angular的最新实践为准: 创建服务
1:使用 @Injectable 装饰器: 所有的服务都需要使用 @Injectable() 装饰器来标记,这允许Angular的依赖注入系统识别并使用这个服务,下面为ts code:
import { Injectable } from '@angular/core'; @Injectable({
providedIn: 'root', // 这使得服务成为一个单例,并在根模块级别提供
})
export class MyService {
constructor() { } // 服务方法示例
getData(): any {
// 实现数据获取逻辑
}
} 2:提供服务: 在上面的例子中,我们使用了 providedIn: 'root',这意味着服务会在根模块级别被提供,并且在整个应用程序中作为单例存在。如果你希望更细粒度地控制服务的生命周期,可以在模块的 providers 数组中声明服务。 使用服务Service
2.1:注入服务: 要在组件、指令或其他服务中使用服务,你需要将其注入到构造函数中 ,下面为ts
import { Component } from '@angular/core';
import { MyService } from './my.service'; @Component({
selector: 'app-my-component',
template: `
<p>{{data}}</p>
`,
})
export class MyComponent {
data: any; constructor(private myService: MyService) { } ngOnInit() {
this.data = this.myService.getData();
}
}
3:==== 父传子 使用 Input 装饰器
父 app-root:html
<h1>app root组件</h1>
<hr>
<p>参数:ptocback, pfunctionback:函数带到子组件</p>
<app-myparent [ptoc]="ptocback" [pfunction]="pfunctionback"></app-myparent> //子组件
<router-outlet></router-outlet> 父:ts
import { Component } from '@angular/core'; @Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
title = 'mydemo01';
ptocback= "你好峰哥:"+Date.now().toLocaleString();
pfunctionback(){
alert("hello fengge");
}
}
子:app-myparent HTML
<p>myparent works!</p>
<h2>来自父组件的参数:{{ptoc}}</h2>
<hr> <app-mychild></app-mychild>
<button (click)="pfunctionClick()">点击获取父组件的函数</button> 子:ts
import { Component, OnInit } from '@angular/core'; import { Input } from '@angular/core'; // 使用 input 装饰器 加 字段参数来传值 ,引入 @Component({
selector: 'app-myparent',
templateUrl: './myparent.component.html',
styleUrls: ['./myparent.component.css']
}) export class MyparentComponent implements OnInit {
@Input() ptoc: any; //这里要定义为any才行,接受来自父组件的数据
@Input() pfunction() { } constructor(private data01service: Dataservice01Service) { }
ngOnInit(): void {} pfunctionClick() {
this.pfunction();
} }
4:=====子传父 使用 ViewChild装饰器
父 app-myparent:html
<p>myparent works!</p>
<hr>
<app-mychild #childData></app-mychild>
<button (click)="childDatatoParentClick()">点击获取子传父的数据</button> 父:ts
import { Component, OnInit } from '@angular/core';
import { ViewChild } from '@angular/core'; @Component({
selector: 'app-myparent',
templateUrl: './myparent.component.html',
styleUrls: ['./myparent.component.css']
}) export class MyparentComponent implements OnInit { @ViewChild("childData") childata: any;
getChildData: any=""; constructor() { } ngOnInit(): void { }
childDatatoParentClick(){
this.getChildData = this.childata.cName
alert("c->p:" + this.getChildData);
}
}
子 app-mychild:html
<p>mychild works!</p> 子 app-mychild:ts import { Component } from '@angular/core';
@Component({
selector: 'app-mychild',
templateUrl: './mychild.component.html',
styleUrls: ['./mychild.component.css']
})
export class MychildComponent implements OnInit { cName:any;
constructor() { } ngOnInit(): void {
this.cName = "我是Child组件的数据参数";
} }
5:===组件使用Service服务传值或者获取数据
1:生成组件的命令 : ng g service services\mydataService01 服务service ts code
import { Injectable } from '@angular/core'; @Injectable({
providedIn: 'root'
})
export class Dataservice01Service { constructor() { }
getData(){
return "this Data from service 01";
}
}
组件上使用 html
<button (click)="getdata01serverClick()">点击获取服务上的数据</button>\ 组件ts
import { Component, OnInit } from '@angular/core';
import { Dataservice01Service } from 'src/app/services/dataservice01.service'; //引入服务service
@Component({
selector: 'app-myparent',
templateUrl: './myparent.component.html',
styleUrls: ['./myparent.component.css']
}) export class MyparentComponent implements OnInit { constructor(private data01service: Dataservice01Service) { //注入service 服务
}
ngOnInit(): void {} getdata01serverClick() {
let ds = this.data01service.getData();
alert("来自服务的数据:" + ds);
} }
6 最后来一张测试截图

Angular cli 组件和服务的创建, 父传子,子传父,服务的简单使用的更多相关文章
- angular cli + primeNG
目录: 1.安装 angular cli 2.创建项目 3.构建路由 4.新建组件 5.组件之间的通信 6.引入primeNG 7.修改primeNG组件样式 8.问题 -------------- ...
- Angular CLI的安装及使用
安装命令行 npm install -g @angular/cli 检查命令行 ng v 使用这个命令可以检查 angular cli是否安装成功.我检查的时候发现没有安装成功,提示我使用的node. ...
- Netty 服务端创建
参考:http://blog.csdn.net/suifeng3051/article/details/28861883?utm_source=tuicool&utm_medium=refer ...
- 3D语音天气球(源码分享)——通过天气服务动态创建3D球
转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! 开篇废话: 这个项目准备分四部分介绍: 一:创建可旋转的"3D球":3 ...
- 3D语音天气球(源代码分享)——通过天气服务动态创建3D球
转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! 开篇废话: 这个项目准备分四部分介绍: 一:创建可旋转的"3D球":3 ...
- gRPC (1):入门及服务端创建和调用原理
1. RPC 入门 1.1 RPC 框架原理 RPC 框架的目标就是让远程服务调用更加简单.透明,RPC 框架负责屏蔽底层的传输方式(TCP 或者 UDP).序列化方式(XML/Json/ 二进制)和 ...
- [转]使用 Angular CLI 和 ng-packagr 构建一个标准的 Angular 组件库
使用 Angular CLI 构建 Angular 应用程序是最方便的方式之一. 项目目标 现在,我们一起创建一个简单的组件库. 首先,我们需要创建一个 header 组件.这没什么特别的,当然接下来 ...
- angular2.0入门---webStorm创建angular CLI项目
创建项目之前需要先安装angular cli,(angular是用typescript编写的,所以先安装typescript,再安装angularjs-cli).打开命令窗口输入 npm instal ...
- Angular CLI 创建你的第一个 Angular 示例程序
第一步:安装 Angular CLI 你要使用 Angular CLI 来创建项目.创建应用和库代码,并执行多种开发任务,比如测试.打包和发布. 全局安装 Angular CLI. 要想使用 npm ...
- Angular入门,开发环境搭建,使用Angular CLI创建你的第一个Angular项目
前言: 最近一直在使用阿里的NG-ZORRO(Angular组件库)开发公司后端的管理系统,写了一段时间的Angular以后发现对于我们.NET后端开发而言真是非常的友善.因此这篇文章主要是对这段时间 ...
随机推荐
- 使用systemd部署r-nacos
1. 前言 r-nacos是一个用rust实现的nacos服务.相较于java nacos来说,是一个提供相同功能,启动更快.占用系统资源更小(初始内存小于10M).性能更高.运行更稳定的服务. r- ...
- Vue3项目-生成Cron表达式组件
最近做的一个vue3项目过程中,需要用到cron表达式功能,而对于普通业务人员,他们是不懂cron表达式规则的,所以需要做一个可手动配置生成cron表达式的功能.从网上查找了一些相关资料,然后结合vu ...
- mysql where子句 区分 大小写
解决办法 使用binary关键字,此时就能区分大小写了 SELECT * FROM `tb_test` WHERE BINARY COL_1='abc'
- Vue子组件向父组件传值(this.$emit()方法)
子组件使用this.$emit()向父组件传值 首先必须在父组件中引用子组件,然后实现传值 第一步在父组件中引入子组件 import UnitByPurchaseAddOrUpdate from '@ ...
- AXI4的PL与PS联合设计
AXI4的PL与PS联合设计 1.实验原理 在前面的学习中,解决了如何利用一个缓冲寄存器控制另外一个寄存器的输入输出配置.接下来就是如何将PL设计直接导入到PS中实现资源互换.PS是可以通过AXI4总 ...
- KingbaseES使用kbbench计算连接耗时
前言 本文讨论一下KingbaseES数据库中如何计算数据库连接耗时.有这样一个场景,不借助第三方工具,在数据库服务端计算1000个数据库连接的总耗时,并取得每个连接耗时的平均值.怎样实现呢?我们可以 ...
- PyCharm专业版延长使用时间【极简】
关注公众号[靠谱杨阅读人生]回复[py]获取破解包! 准备好最新版本的PyCharm(去官网下载页面上的第一个就可以,我使用的版本如下图所示) 打开软件选择试用,进去之后可以新建一个项目然后把这个压缩 ...
- Python爬虫初步---jupyterNptebook使用
学习视频笔记:
- ET介绍——单线程异步
单线程异步 前面几个例子都是多线程实现的异步,但是异步显然不仅仅是多线程的.我们在之前的例子中使用了Sleep来实现时间的等待,每一个计时器都需要使用一个线程,会导致线程切换频繁,这个实现效率很低,平 ...
- openGauss升级脚本撰写
概述 重要提示: 升级过程通过执行升级 sql 脚本实现系统表变更,这些脚本必须由开发人员在修改系统表的同时一并提供升级 sql 脚本,请将这些脚本代码提交至 openGauss-server/src ...