前言

阅读本文,是在你了解 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开发的内容内容请搜索Devmax以前的文章或继续浏览下面的相关文章希望大家以后多多支持Devmax!

深入聊一聊Angular开发的内容的更多相关文章

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. Android Studio是否支持用于Android UI设计的AngularJS?

    我对AndroidStudio有疑问:AS在设计XML文件时是否支持AngularJS代码,例如:对于小动画或效果?

  3. android – 如何使用ClientID和ClientSecret在Phonegap中使用Angularjs登录Google OAuth2

    我正尝试使用Angularjs(使用IonicFramework)通过GoogleOAuth2从我的Phonegap应用程序登录.目前我正在使用http://phonegap-tips.com/articles/google-api-oauth-with-phonegaps-inappbrowser.html进行登录.但是当我使用Angular-UI-RouterforIonic时,它正在创建非常

  4. 利用require.js与angular搭建spa应用的方法实例

    这篇文章主要给大家介绍了关于利用require.js与angular搭建spa应用的方法实例,文中通过示例代码给大家介绍的非常详细,对大家的理解和学习具有一定的参考学习价值,需要的朋友们下面跟着小编来一起看看吧。

  5. 详解Angular动态组件

    本文主要介绍了Angular动态组件,对此感兴趣的同学,可以亲自实验一下。

  6. 详解如何使用webpack+es6开发angular1.x

    本篇文章主要介绍了详解如何使用webpack+es6开发angular1.x,具有一定的参考价值,有兴趣的可以了解一下

  7. angular2系列之路由转场动画的示例代码

    本篇文章主要介绍了angular2系列之路由转场动画的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  8. 一种angular的方法级的缓存注解(装饰器)

    本篇文章主要介绍了一种angular的方法级的缓存注解(装饰器),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  9. 使用Angular.js开发的注意事项

    这篇文章主要记录了一些在学习和使用angular.js踩到的坑和需要注意的点,方便以后自己查阅,也给同样遇到这些问题的朋友们一些帮助,有需要的朋友们下面来一起看看吧。

  10. 动手写一个angular版本的Message组件的方法

    本篇文章主要介绍了动手写一个angular版本的Message组件的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

随机推荐

  1. js中‘!.’是什么意思

  2. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  3. 基于JavaScript编写一个图片转PDF转换器

    本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

  4. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. AngularJs上传前预览图片的实例代码

    使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,怎么实现这样的功能呢?今天小编给大家分享AugularJs上传前预览图片的实现代码,需要的朋友参考下吧

  6. JavaScript面向对象编程入门教程

    这篇文章主要介绍了JavaScript面向对象编程的相关概念,例如类、对象、属性、方法等面向对象的术语,并以实例讲解各种术语的使用,非常好的一篇面向对象入门教程,其它语言也可以参考哦

  7. jQuery中的通配符选择器使用总结

    通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

  8. javascript 动态调整图片尺寸实现代码

    在自己的网站上更新文章时一个比较常见的问题是:文章插图太宽,使整个网页都变形了。如果对每个插图都先进行缩放再插入的话,太麻烦了。

  9. jquery ajaxfileupload异步上传插件

    这篇文章主要为大家详细介绍了jquery ajaxfileupload异步上传插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. React学习之受控组件与数据共享实例分析

    这篇文章主要介绍了React学习之受控组件与数据共享,结合实例形式分析了React受控组件与组件间数据共享相关原理与使用技巧,需要的朋友可以参考下

返回
顶部