Angular cli 组件和服务的创建, 父传子,子传父,服务的简单使用

angular,cli · 浏览次数 : 0

小编点评

**组件** ``` <p>{{data}}</p> ``` **服务** ```ts import { Injectable } from '@angular/core'; @Injectable({ providedIn: 'root' }) export class MyService { constructor() {} getData(): any { // 实现数据获取逻辑 } } ``` **父组件** ```html <p>myparent works!</p><h2>来自父组件的参数:{{ptoc}}</h2><hr><app-mychild></app-mychild><button (click)=\"pfunctionClick()\">点击获取父组件的函数</button> ``` **子组件** ```html <p>mychild works!</p><h2>来自父组件的参数:{{ptoc}}</h2><hr><app-mychild #childData></app-mychild><button (click)=\"childDatatoParentClick()\">点击获取子传父的数据</button> ``` **测试** 在 Angular 构建过程中,您可以使用 `ng test` 命令运行测试。运行此命令将创建一个名为 `test.html` 的测试文件,该文件包含测试用例。 **测试截图** 在构建过程中,您可以使用 `ng build` 命令生成一个包含测试的 HTML 文件的静态构建。生成的静态构建将包含测试截图。

正文

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 组件和服务的创建, 父传子,子传父,服务的简单使用

1:Angular cli 创建组件component ng g component components\right ng g c wave 简写 需要定位到根路径下即可创建组件 Could not find an NgModule. Use the skip-import option to s

Angular等了三年,那个她已经来了

“在等待其他框架跟上的这三年”,Angular在陆陆续续抛弃之前引以为豪的设计。又由于大量的历史包袱,这些设计变更又做得扭扭捏捏,做不到轻装上阵。

Angular项目简单使用拦截器 httpClient 请求响应处理

1:为啥要使用拦截器 httpClient 请求响应处理,其作用我们主要是: 目前我的Angular版本是Angular 17.3,版本中实现请求和响应的拦截处理了。这种机制非常适合添加如身份验证头、错误统一处理、日志记录等功能。 具体的操作步骤 2:注入服务:ng g s services/myh

Angular 集成 StreamSaver 大文件下载

应用场景: 实现目标: 在网页端实现大文件(文件大小 >= 2 G) 断点续传 实际方案: 发送多次请求, 每次请求一部分文件数据, 然后通过续写将文件数据全部写入. 难点: 无法实现文件续写, 最后采用 StreamSaver 来解决这个问题. 1. 首先从 git hub 将 StreamSav

angular + express 实现websocket通信

最近需要实现一个功能,后端通过TCP协议连接雷达硬件的控制器,前端通过websocket连接后端,当控制器触发消息的时候,把信息通知给所以前端; 第一个思路是单独写一个后端服务用来实现websocket,调试成功了,后来又发现一个插件express-ws,于是决定改变思路,研究了下,最终代码如下,希

瑞亚时间管理大师,基于 .NET 6 和 Angular 构建的在线任务管理协作平台

瑞亚时间管理大师 瑞亚时间管理大师, 是一个在线的任务管理、项目管理、 团队协作平台。瑞亚 拥有现代化的页面风格,高效、简便,同时适合个人和团队使用。 瑞亚对个人免费,提供了无限制的任务,列表,和空间。 功能预览 瑞亚时间管理大师是以任务管理为核心,还包括了看板,文档,思维导图,白板,和 OKR 目

看看Angular有啥新玩法!手把手教你在Angular15中集成Excel报表插件

> 摘要:本文由葡萄城技术团队于博客园原创并首发。葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 # Angular15新特性 Angular框架(以下简称“Angular”)作为一款由谷歌开发的Web应用程序框架,其强大的依赖注入系统、可重复使用的模块化开发理念和响应式编程模式等特

基于 Angular和Material autocomplete组件再封装的可双向绑定key-value的可输入下拉框

GitHub: https://github.com/Xinzheng-Li/AngularCustomerComponent 效果图:为了方便使用,把许多比如ADD的功能去了,可以在使用后自行实现。 调用: 1

【Dotnet 工具箱】基于 .NET 6 和 Angular 构建项目任务管理平台

1.Reha 时间管理大师 Rhea 是一个基于 C# 和 .NET 6 开发的在线任务管理平台,类似于 禅道、Jira、Redmine, 滴答清单等。 支持多视图多维度统一管理任务。多级结构,工作区,空间,文件夹,列表,可以更灵活的进行任务管理。 应用支持多主题和主题色切换,灵活搭配,随心所欲。

教你学会使用Angular 应用里的 export declare const X Y

摘要:export declare const X: Y语法用于在Angular应用程序中声明一个具有指定类型的常量变量,并将其导出,以便在其他文件中使用。 本文分享自华为云社区《关于 Angular 应用里的 export declare const X Y 的用法》,作者:Jerry Wang。