热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

angular中基类使用了依赖注入,在所有子类继承时都要注入,父级一旦修改,所有子类都要更改,不灵活啊

使用的是angular21.我习惯将公共的方法抽象到基类中如下:

使用的是angular2

1.我习惯将公共的方法抽象到基类中如下:



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
import { Injectable, EventEmitter } from '@angular/core';

import { Http, Response, Headers, Jsonp, URLSearchParams } from '@angular/http';

import { Observable, Subject } from "rxjs";

import { serverRes } from './base.struct';

import { errorCode } from '../../common/param';

import { Router } from "@angular/router";

@Injectable()

export class BaseService {

    constructor(

        private jsonp: Jsonp,

        private baseHttp: Http,

        private go:Router

    ) { }

    handleError(error: Response | any) {

        console.error("baseService received request errorr");

        console.log(error);

        let errMsg: string;

        if (error instanceof Response) {

            const body = error.json() || '';

            const err = body.error || JSON.stringify(body);

            errMsg = `${error.status} - ${error.statusText || ''} ${err}`;

        } else {

            errMsg = error.message ? error.message : error.toString();

        }

        Observable.throw(errMsg);

        return false;

    }

    createRequstParam(data: any, jsOnp= false): any {

        let params = new URLSearchParams();

        for (let key in data) {

            params.set(key, data[key])

        }

        if (jsOnp== true) {

            params.set('callback', 'JSONP_CALLBACK');

        }

        return params;

    }

    createHeaders() {

        let headers = new Headers();

        headers.append('Content-Type', 'application/x-www-form-urlencoded');

        return headers;

    }

    checkResponeCode(res: Response) {

        //this.questStaus.questStatus.emit("remove");

        let serverRespOnse= res.json() as serverRes

        if (serverResponse.code != errorCode.CODE_OK) {

            console.error("请求代码不是OK,error code is " + serverResponse.code);

            console.error(serverResponse.desc)

        }

        if (serverResponse.code == errorCode.CODE_NOT_LOGIN || serverResponse.code == errorCode.CODE_EXPIRE) {

            //this.goToPage.navigateByUrl("/view/login");

        }

        return serverResponse;

    }

    queryServer(query: { url: string, method: string }, param = {}): Promise {

        //this.questStaus.questStatus.emit("add");

        let form = this.createRequstParam(param);

        switch (query.method) {

            case "post":

                return this.baseHttp.post(query.url, form, { headers: this.createHeaders() }).toPromise().then(this.checkResponeCode.bind(this)).catch(this.handleError);

            case "get":

            default:

                return this.baseHttp.get(query.url, { search: form }).toPromise().then(this.checkResponeCode.bind(this)).catch(this.handleError);

        }

    }

    changeAttribut(arr: [any], id: number, name: string, value: any): string | number {

        for (let key in arr) {

            if (arr[key].id == id) {

                arr[key][name] = value;

                return key;

            }

        }

        return '';

    }

}

子类如下:

1
2
3
4
5
6
7
8
9
10
11
12
import { Injectable } from '@angular/core';

import {BaseService} from '../base/base.service';

import { Http,Jsonp,} from '@angular/http';

import { Router } from "@angular/router";

@Injectable()

export class AreaService extends BaseService{



    constructor(private thishttp:Http,private thisjsonp:Jsonp,private rout:Router) {

        super(thisjsonp,thishttp,rout);

    }



}

这样写的缺点就是我一旦修改了基类的注入,所有子类全部都需要修改,十分麻烦不灵活,想过,直接实例化这些类,但是水平不够,失败了,还有什么别的方法吗?





   



推荐阅读
  • 使用nodejs爬取b站番剧数据,计算最佳追番推荐
    本文介绍了如何使用nodejs爬取b站番剧数据,并通过计算得出最佳追番推荐。通过调用相关接口获取番剧数据和评分数据,以及使用相应的算法进行计算。该方法可以帮助用户找到适合自己的番剧进行观看。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • WebSocket与Socket.io的理解
    WebSocketprotocol是HTML5一种新的协议。它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送 ... [详细]
  • 本文介绍了django中视图函数的使用方法,包括如何接收Web请求并返回Web响应,以及如何处理GET请求和POST请求。同时还介绍了urls.py和views.py文件的配置方式。 ... [详细]
  • Java自带的观察者模式及实现方法详解
    本文介绍了Java自带的观察者模式,包括Observer和Observable对象的定义和使用方法。通过添加观察者和设置内部标志位,当被观察者中的事件发生变化时,通知观察者对象并执行相应的操作。实现观察者模式非常简单,只需继承Observable类和实现Observer接口即可。详情请参考Java官方api文档。 ... [详细]
  • 本文讨论了如何在codeigniter中识别来自angularjs的请求,并提供了两种方法的代码示例。作者尝试了$this->input->is_ajax_request()和自定义函数is_ajax(),但都没有成功。最后,作者展示了一个ajax请求的示例代码。 ... [详细]
  • 本文介绍了在wepy中运用小顺序页面受权的计划,包含了用户点击作废后的从新受权计划。 ... [详细]
  • 延迟注入工具(python)的SQL脚本
    本文介绍了一个延迟注入工具(python)的SQL脚本,包括使用urllib2、time、socket、threading、requests等模块实现延迟注入的方法。该工具可以通过构造特定的URL来进行注入测试,并通过延迟时间来判断注入是否成功。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • 使用正则表达式爬取36Kr网站首页新闻的操作步骤和代码示例
    本文介绍了使用正则表达式来爬取36Kr网站首页所有新闻的操作步骤和代码示例。通过访问网站、查找关键词、编写代码等步骤,可以获取到网站首页的新闻数据。代码示例使用Python编写,并使用正则表达式来提取所需的数据。详细的操作步骤和代码示例可以参考本文内容。 ... [详细]
  • 本文介绍了如何使用Express App提供静态文件,同时提到了一些不需要使用的文件,如package.json和/.ssh/known_hosts,并解释了为什么app.get('*')无法捕获所有请求以及为什么app.use(express.static(__dirname))可能会提供不需要的文件。 ... [详细]
author-avatar
Lanboream
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有