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)。一个类只能继承自另一个类,但是可以实现多个接口。

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

相关文章

  • Angular2关于@angular/cli默认端口号配置的问题

    Angular2关于@angular/cli默认端口号配置的问题

    本篇文章主要介绍了Angular2关于@angular/cli默认端口号配置的问题,非常具有实用价值,需要的朋友可以参考下
    2017-07-07
  • 详解基于angular-cli配置代理解决跨域请求问题

    详解基于angular-cli配置代理解决跨域请求问题

    本篇文章主要介绍了详解基于angular-cli配置代理解决跨域请求问题,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • Angular Material Icon使用详解

    Angular Material Icon使用详解

    这篇文章主要介绍了Angular Material Icon使用详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-11-11
  • angularjs 获取默认选中的单选按钮的value方法

    angularjs 获取默认选中的单选按钮的value方法

    下面小编就为大家分享一篇angularjs 获取默认选中的单选按钮的value方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-02-02
  • AngularJS 日期格式化详解

    AngularJS 日期格式化详解

    AngularJS的日期格式化有两种形式,一种是在HTML页面,一种是在JS代码里,都是用到AngularJS的过滤器$filter
    2015-12-12
  • 利用AngularJs实现京东首页轮播图效果

    利用AngularJs实现京东首页轮播图效果

    这篇文章给大家介绍了如何利用AngularJs实现京东首页轮播图的效果,本文通过示例代码详细介绍了实现过程,对大家学习AngularJS具有一定参考借鉴价值,有需要的朋友们可以参考借鉴。
    2016-09-09
  • angular1配合gulp和bower的使用教程

    angular1配合gulp和bower的使用教程

    这篇文章主要介绍了angular1配合gulp和bower使用教程,本文给大家介绍的非常详细,具有参考借鉴价值,需要的朋友可以参考下
    2018-01-01
  • AngularJS自定义控件实例详解

    AngularJS自定义控件实例详解

    这篇文章主要介绍了AngularJS自定义控件,结合实例形式详细分析了AngularJS自定义指令与模板操作的相关函数与使用技巧,需要的朋友可以参考下
    2016-12-12
  • angularJS 指令封装回到顶部示例详解

    angularJS 指令封装回到顶部示例详解

    本篇文章主要介绍了angularJS 指令封装回到顶部示例详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • 基于angularjs实现图片放大镜效果

    基于angularjs实现图片放大镜效果

    这篇文章给大家分享了angularjs实现购物放大镜效果的源码实例,代码介绍的很详细,有需要的可以参考借鉴,下面来一起看看。
    2016-08-08

最新评论