返回顶部
首页 > 资讯 > 前端开发 > JavaScript >深入聊一聊Angular开发的内容
  • 347
分享到

深入聊一聊Angular开发的内容

2024-04-02 19:04:59 347人浏览 安东尼
摘要

目录前言组件 Component路由 Router管道 Pipeline指令 Directive服务 Service总结前言 阅读本文,是在你了解 angular 基本知识的前提下,

前言

阅读本文,是在你了解 angular 基本知识的前提下,如果读者还不了解,请前往官网了解。

如果读者有 Vue 或者 React开发经验,会很好理解接下来讲解的内容~

组件 Component

团队开发都有自己的约定。我们这里约定 app/pages 目录下的组件是页面组件,其页面组件下的 components 是页面组件的私有组件。app/components 是公有组件。

现在我们新建一个用户的列表页面。

mkdir pages 后,直接进入 pages 目录执行 ng generate component user-list 创建用户列表。你会得到下面的目录:

user-list
├── user-list.component.html                          // 页面骨架
├── user-list.component.sCSS                          // 页面独有样式
├── user-list.component.spec.ts                       // 测试文件
└── user-list.component.ts                            // javascript 文件

使用命令行生成组件的好处是,它会自动在 app.module.ts 中声明本组件 UserListComponent,而不需要手动去操作。

如果你重复去新建一个组件,则脚手架不会执行,不用害怕在同一个地方有重复的组件出现

路由 Router

不同的路由,表示你访问不同的页面组件。这在 app-routing.module.ts 中去添加。

首先你要引入页面组件:

import { UserListComponent } from './pages/user-list/user-list.component';

之后添加路由:

const routes: Routes = [{
  path: "user-list",
  component: UserListComponent
}];

为了方便演示,只保留 app.component.html 内容 <router-outlet></router-outlet>

这样浏览器进入路径 Http://localhost:4200/user-list 就可以看到效果了。

默认的是 history 模式,如果你要改为 hash 模式的话,可以修改 app-routing.module.ts 内容如下:

import { NgModule } from '@angular/core';
import { RouterModule, Routes, PreloadAllModules } from '@angular/router';
import { UserListComponent } from './pages/user-list/user-list.component';

const routes: Routes = [{
  path: "user-list",
  component: UserListComponent
}];

@NgModule({
  imports: [RouterModule.forRoot(
    routes,
    {
      useHash: true,// 使用 hash 模式
      preloadingStrategy: PreloadAllModules
    }
  )],
  exports: [RouterModule]
})
export class AppRoutingModule { }

此时,你访问的路由应该是 http://localhost:4200/#/user-list。

管道 Pipeline

管道你可以理解为过滤器。用过 vue 的读者应该对这个不默认。

Angular 有默认的管道元件,比如:

  • UpperCase

  • LowerCase

  • Currency 货币

  • PercentPipe

  • DatePipe

  • JSONPipe

  • SlicePipe

使用也很简单:

<p>{{ uppercase_var|uppercase }}</p>
<p>{{ lowercase_var|lowercase }}</p>
<p>{{ currency_var|currency:"CNY":"symbol" }}</p>
<p>{{ percent_var|percent }}</p>
<p>{{ date_var|date:'yyyy-MM-dd HH:mm:ss' }}</p>
<p>{{ json_var|json }}</p>
<p>{{ slice_var|slice:0:9 }}</p>

当然,你还可以自定义管道。

我们在 app 目录下 mkdir pipes 文件夹统一管理管道元件。

ng generate pipe get-first-character 命令行创建一个获取第一个字符的管道,也会自动在 app.module.ts 中声明 GetFirstCharacterPipe(驼峰式)管道,很是方便。因为这里的功能比较简单,我们简单修改下 get-first-character.pipe.ts 文件就很满足要求了。

import { Pipe, PipeTransfORM } from '@angular/core';

@Pipe({
  name: 'getFirstCharacter'
})
export class GetFirstCharacterPipe implements PipeTransform {
  transform(value: string, ...args: unknown[]): unknown {
    return value.slice(0, 1);
  }
}

调用如下:

<p>{{ string_var|getFirstCharacter }}</p>

Easy, Right?

指令 Directive

可以理解为指令是对控制器的补充,主要功能是对Dom元素和数据的操作,已有的指令,如:ngModel,这些指令直接到官网上查看就可以了,比较简单。

下面我们说的是自定义的指令。

老样子,我们进入 app 目录,mkdir directives 文件夹统一管理指令。

ng generate directive directive_console 创建一个输出的指令,也会自动在 app.module.ts 中声明 DirectiveConsoleDirective(驼峰式)管道,很是方便。此文件的内容如下:

import { Directive, ElementRef, HostListener } from '@angular/core';

@Directive({
  selector: '[appDirectiveConsole]'
})
export class DirectiveConsoleDirective {

  constructor(
    public elementRef: ElementRef
  ) { }

  @HostListener('keyup', ['$event.target'])
  keyupFunction(event: any) {
    if(event.value) {
      console.log(this.elementRef)
      this.elementRef.nativeElement.value = event.value.trim()
    }
  }
}

我们在 user-list.component.html 中新增:

<input type="text" id="name" appDirectiveConsole>

那么会有下面这种效果:

后面的章节会展开说指令

服务 Service

服务,你可以理解为请求 api 的地方,那也不错,但是不仅仅有这么个用处,在后面的章节会展开说。

那么我们把它当成处理 api 的地方吧。

进入 app 目录,mkdir services 文件夹统一管理服务。

ng generate service service_demo 创建一个 demo 数据的服务。

我们在 assets 文件夹下创建一个 demo.json 文件:

{
  "name": "Jimmy"
}

下面我们对 service-demo.service.ts 进行方法的编写,通过 http 获取 demo.json 数据。

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';

@Injectable({
  providedIn: 'root'
})
export class ServiceDemoService {

  constructor(
    private http: HttpClient
  ) { }

  // 获取 demo.json 数据
  getDemo() {
    return this.http.get('assets/demo.json', {
      responseType: 'json',
      params: {}
    })
  }
}

之后,我们在 user-list.component.ts 文件中调用下:

import { Component, OnInit } from '@angular/core';
import { ServiceDemoService } from 'src/app/services/service-demo.service';

@Component({
  selector: 'app-user-list',
  templateUrl: './user-list.component.html',
  styleUrls: ['./user-list.component.scss']
})
export class UserListComponent implements OnInit {

  public name:string = '';

  constructor(
    private demoService: ServiceDemoService
  ) { }

  nGonInit(): void {
    this.demoService.getDemo().subscribe({
      next: (data: any) => {
        this.name = data.name
      },
      error: () => {}
    })
  }
}

上面用到了 http 的相关服务,你必须在 app.module.ts 中引入其模块才行的哦。

import { HttpClientModule } from '@angular/common/http';
// ...

@NgModule({
  imports: [
    HttpClientModule
  ],
  //...
})

运行之后,如下图:

嗯~

整体熟悉下来,你想基本 hold 住 angular 开发单页面系统,还需要你在官网中看下基本的语法,毕竟基本的语法在这里也没什么好说的。

总结

到此这篇关于Angular开发内容的文章就介绍到这了,更多相关Angular开发的内容内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 深入聊一聊Angular开发的内容

本文链接: https://lsjlt.com/news/150123.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 深入聊一聊Angular开发的内容
    目录前言组件 Component路由 Router管道 Pipeline指令 Directive服务 Service总结前言 阅读本文,是在你了解 Angular 基本知识的前提下,...
    99+
    2024-04-02
  • 一文聊聊Angular中的依赖注入
    译者添加:举个例子 -- 当 classA 使用 classB 的某些功能时,则表示 classA 具有 classB 的依赖。在使用 classA 之前,我们需要创建 classB。推荐文章依赖注入是什么?如何使用它?我们都知道在 Ang...
    99+
    2023-05-14
    前端 JavaScript Angular.js
  • angular学习之深入聊聊状态和动画
    本篇文章带大家深入了解一下angular中的状态和动画,简单介绍一下创建动画的方法,并聊聊关键帧动画、动画回调、可重用动画、交错动画等知识点,希望对大家有所帮助!状态1、什么是状态状态表示的是要进行运动的元素在运动的不同时期所呈现的样式。2...
    99+
    2023-05-14
    状态 动画 Angular
  • 深入聊一聊JDK中的Map和Set
    目录1. 基础知识2.模型3.Map的使用4.Map接口的使用(1)元素的添加和更新操作(2)在Map集合中查询/搜索特定的值(3) 删除Map中指定的value和key ...
    99+
    2022-12-21
    jdk map和set java map有哪些 jdk set集合大小
  • 深入聊聊Java内存泄露问题
    目录Java内存泄露问题附:内存泄露的典型情况总结Java内存泄露问题 所谓内存泄露就是指一个不再被程序便用的对象或变量一直被占据在内存中。 Java 中有垃圾回收机制,它可以保证一...
    99+
    2024-04-02
  • 一文聊聊Angular中的管道(PIPE)
    在我们设置好管道之后,浏览器中的时间已经发生了变化了其他管道Angular还提供了其他管道,比如说改变人名币格式的管道(currency):Angular - CurrencyPipehttps://angular.cn/api/commo...
    99+
    2023-05-14
    管道 Angular
  • 深入聊聊Golang中的sync.Cond
    本文将介绍 Go 语言中的 sync.Cond 并发原语,包括 sync.Cond的基本使用方法、实现原理、使用注意事项以及常见的使用使用场景。能够更好地理解和应用 Cond 来实现 goroutine 之间的同步。1. 基本使用1.1 定...
    99+
    2023-05-14
    后端 Go
  • 深入聊聊vue3中的reactive()
    在vue3的开发中,reactive是提供实现响应式数据的方法。日常开发这个是使用频率很高的api。这篇文章笔者就来探索其内部运行机制。小白一枚,写得不好请多多见谅。调试版本为3.2.45什么是reactivereactive是Vue3中提...
    99+
    2023-05-14
    前端 Vue.js JavaScript
  • 深入聊一聊虚拟DOM与diff算法
    目录虚拟DOM与diff算法snabbdom环境搭建虚拟DOM和h函数diff算法patch函数patchVnode函数updateChildren函数v-for中key作...
    99+
    2024-04-02
  • 深入聊一聊JS中new的原理与实现
    目录定义构造函数体不同 无返回值 返回对象 返回非对象 没有属性绑定+返回非对象 构造函数类型不同 构造函数为普通函数 构造函数为箭头函数 手写new 总结定义 new 运算符创建一...
    99+
    2024-04-02
  • 深入聊聊 Golang 的使用方法
    在互联网行业的大环境下,Golang(简称Go)已成为一个备受瞩目的编程语言,众多互联网公司如:谷歌、阿里巴巴、腾讯等,都已将其作为主力开发语言。Go 语言在因特网时代不断壮大的背景下,以并发编程,运行速度以及简单易用的特点,受到了众多程序...
    99+
    2023-05-14
  • 深入聊聊Node中的File模块
    在聊 Stream/Buffer 的时候,我们已经开始使用require("fs")引入文件模块做一些操作了文件模块是对底层文件操作的封装,例如文件读写/打开关闭/删除添加等等文件模块最大的特点就是所有的方法都提供的同步...
    99+
    2023-05-14
    Node.js 前端
  • 详细深入聊一聊Mysql中的int(1)和int(11)
    目录前言正文Java mysql总结前言 首先在吐槽这个现象前,我先说下我们该篇的内容。 1.  int 类型表字段 在mysql数据库里面,到底存值的范围是多少 ? 什么时候是  ...
    99+
    2022-08-08
    mysql中的int(1)和int(11)的区别 mysql int(1)和int(10) mysql int(11)
  • 聊聊怎么用node写入读取文件内容
    以上就是聊聊怎么用node写入读取文件内容的详细内容,更多请关注编程网其它相关文章!...
    99+
    2023-05-14
    nodejs​ node
  • 深入聊聊gitee中的极化功能
    随着开源技术的日益发展,越来越多的开发者开始使用Gitee来管理和分享他们的代码。作为一个开发者,如何更好地利用Gitee提高自己的开发效率和项目贡献呢?其中之一就是要学会如何看极化。一、Gitee的极化概念Gitee的极化是指将代码库中的...
    99+
    2023-10-22
  • 深入浅出聊一聊js中的'this'关键字
    目录前言什么是'this'关键字四种方式---1.调用函数的第一种方法是:将函数作为一种方法四种方式---2.调用函数的第二种方法是: 简单的调用函数,不将函数作为方...
    99+
    2024-04-02
  • 深入浅出的聊聊Swift高阶函数
    目录初探高阶函数mapcompactMapcompactMapValuesflatMapfilterreduce组合使用总结初探高阶函数 在 Swift 中,高阶函数一共有下面几个...
    99+
    2024-04-02
  • 聊聊Golang反射注释的相关内容
    Golang是一种简洁而极具效率的编程语言,而它的反射机制更是为程序员提供了各种强大的工具。本文将介绍Golang反射注释的相关内容。首先,什么是反射?反射是 Golang 语言中提供的一种强大的机制,可以在运行时动态地获取和操作程序的对象...
    99+
    2023-05-14
  • 深入聊聊C语言中的Const关键字
    目录前言01const简述02常量的应用常量作为函数的参数C++中应用加const03#define和const总结前言 const是一个C语言的关键字,它限定一个变量不允许被改变。...
    99+
    2024-04-02
  • 聊聊Python的一个内置模块Collections
    1、模块说明collections 是 Python 的一个内置模块,所谓内置模块的意思是指 Python 内部封装好的模块,无需安装即可直接使用。collections 包含了一些特殊的容器,针对 Python 内置的容器,例如:list...
    99+
    2023-05-14
    Python 函数 内置模块
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作