angular组件继承的实现方法

 更新时间:2018年02月26日 14:27:28   作者:阿踏  
本篇文章主要介绍了angular组件继承的实现方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
="currentPage" [pageCount]="totalPage"></simple-pagination> ` }) export class AppComponent { currentPage: number = 2; totalPage: number = 10; }

我们发现 UI 界面风格已经完全不一样了,但仔细想一下组件分页的控制逻辑仍可以继续使用。Angular 团队也考虑到了这种场景,因此为我们引入组件继承的特性,这对我们开发者来说,可以大大地提高组件的复用性。接下来我们来一步步实现新的分页组件,首先先更新 UI 界面,具体代码如下:

exe-pagination.component.ts

import { Component } from '@angular/core'; import { SimplePaginationComponent } from './simple-pagination.component'; @Component({
  selector: 'exe-pagination',
  template: `
  <a (click)="previousPage()" [class.disabled]="!hasPrevious()" 
   href="javascript:void(0)" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >
   ««
  </a> 
  <span>{{ page }} / {{ pageCount }}</span>
  <a (click)="nextPage()" [class.disabled]="!hasNext()"
   href="javascript:void(0)" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >
   »»
  </a>
 ` }) export class ExePaginationComponent extends SimplePaginationComponent {
  
}

上面代码中,有几个注意点:

首先我们先导入已开发完的 SimplePaginationComponent 组件类

然后让我们新定义的 ExePaginationComponent 类继承于 SimplePaginationComponent 类

接着我们更新页面的视图模板,把按钮替换为 << 和 >>

我们看到更新的视图模板,我们仍然可以使用基类 (SimplePaginationComponent) 中定义的所有输入、输出属性

再继续开发 ExePaginationComponent 组件前,我们先来更新一下 SimplePaginationComponent 组件:

@Component({
 selector: 'simple-pagination',
 template: `
  <button (click)="previousPage()" [disabled]="!hasPrevious()">{{ previousText }}</button> 
  <button (click)="nextPage()" [disabled]="!hasNext()">{{ nextText }}</button>

  <p>page {{ page }} of {{ pageCount }}</p>
 ` }) export class SimplePaginationComponent {
 ... @Input()
 previousText = 'Previous'; @Input()
 nextText = 'Next';
 ...
}

注意:

当用户没有设置 previousText 输入属性值时,我们使用的默认值是 'Previous'

当用户没有设置 nextText 输入属性值时,我们使用的默认值是 'Next'

对于 ExePaginationComponent 组件,我们也希望让用户自定义 previousText 和 nextText 的值,但它们对应的默认值是:'<<' 和 '>>',这时我们可以覆盖 SimplePaginationComponent 组件的输入属性,具体示例如下:

import { Component , Input, Output} from '@angular/core'; import { SimplePaginationComponent } from './simple-pagination.component'; @Component({
  selector: 'exe-pagination',
  template: `
  <a (click)="previousPage()" [class.disabled]="!hasPrevious()" 
   href="javascript:void(0)" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >
   ««
  </a> 
  <span>{{ page }} / {{ pageCount }}</span>
  <a (click)="nextPage()" [class.disabled]="!hasNext()"
   href="javascript:void(0)" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >
   »»
  </a>
 ` }) export class ExePaginationComponent extends SimplePaginationComponent { @Input() previousText = '<<'; // override default text @Input() nextText = '>>'; // override default text }

类的概念

虽然 JavaScript 中有类的概念,但是可能大多数 JavaScript 程序员并不是非常熟悉类,这里对类相关的概念做一个简单的介绍。

类 (Class):一种面向对象计算机编程语言的构造,是创建对象的蓝图,描述了所创建的对象共同的属性和方法。

对象 (Object):类的实例,通过 new 创建

面向对象 (OOP) 的三大特性:封装、继承、多态

封装 (Encapsulation):将对数据的操作细节隐藏起来,只暴露对外的接口。外界调用端不需要知道细节,就能通过对外提供的接口来访问该对象,同时也保证了外界无法任意更改对象内部的数据

继承 (Inheritance):子类继承父类,子类除了拥有父类的所有特性外,还可以扩展自有的功能特性

多态 (Polymorphism):由继承而产生了相关的不同的类,对同一个方法可以有不同的响应。比如 Cat 和 Dog 都继承自 Animal,但是分别实现了自己的 eat() 方法。此时针对某一个实例,我们无需了解它是 Cat 还是 Dog,就可以直接调用 eat() 方法,程序会自动判断出来应该如何执行 eat()

存取器(getter & setter):用于属性的读取和赋值

修饰符(Modifiers):修饰符是一些关键字,用于限定成员或类型的性质。比如 public 表示公有属性或方法

抽象类(Abstract Class):抽象类是供其他类继承的基类,抽象类不允许被实例化。抽象类中的抽象方法必须在子类中被实现

接口(Interfaces):不同类之间公有的属性或方法,可以抽象成一个接口。接口可以被类实现(implements)。一个类只能继承自另一个类,但是可以实现多个接口。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Angular 4 指令快速入门教程

    Angular 4 指令快速入门教程

    本篇文章主要介绍了Angular 4 指令快速入门教程,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • 如何处理Angular 错误消息ERROR Error NullInjectorError No provider for XX

    如何处理Angular 错误消息ERROR Error NullInjectorError No provid

    这篇文章主要介绍了如何处理Angular 错误消息ERROR Error NullInjectorError No provider for XX
    2023-07-07
  • angular2系列之路由转场动画的示例代码

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

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

    Angular的$http与$location

    这篇文章主要为大家详细介绍了Angular的$http与$location,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-12-12
  • Angularjs中$http以post请求通过消息体传递参数的实现方法

    Angularjs中$http以post请求通过消息体传递参数的实现方法

    这篇文章主要介绍了Angularjs中$http以post请求通过消息体传递参数的方法,结合实例形式分析了$http使用post请求传递参数的相关设置与使用技巧,需要的朋友可以参考下
    2016-08-08
  • Angular4.0中引入laydate.js日期插件的方法教程

    Angular4.0中引入laydate.js日期插件的方法教程

    在AngularJs中我们会不可避免的使用第三方库,例如jquery插件库。下面这篇文章主要给大家介绍了关于Angular4.0中引入laydate.js日期插件的相关资料,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧。
    2017-12-12
  • Angularjs 事件指令详细整理

    Angularjs 事件指令详细整理

    这篇文章主要介绍了Angularjs 事件指令详细整理的相关资料,这里对AngularJS 的所有的事件指令一一做出详细介绍,需要的朋友可以参考下
    2017-07-07
  • 详解AngularJS Filter(过滤器)用法

    详解AngularJS Filter(过滤器)用法

    这篇文章主要介绍了AngularJS的filter,中文名“过滤器”是用来过滤变量的值,或者格式化输出,得到自己所期望的结果或格式的东东,的相关资料,需要的朋友可以参考下
    2015-12-12
  • 浅谈angular4生命周期钩子

    浅谈angular4生命周期钩子

    本篇文章主要介绍了浅谈angularr4生命周期钩子,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • Angularjs之如何在跨域请求中传输Cookie的方法

    Angularjs之如何在跨域请求中传输Cookie的方法

    跨域传输Cookie是需要后台和前台同时做相关处理才能解决的,这篇文章主要介绍了Angularjs之如何在跨域请求中传输Cookie的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06

最新评论