Angular4 - 共享模块

1. AppModule

@NgModule({  declarations: [  AppComponent  ],  imports: [  BrowserModule  ],  exports: [ AppComponent ],  providers: [],  bootstrap: [AppComponent]
})
export class AppModule { }

imports 本模块声明的组件模板需要的类所在的其它模块。
providers 服务的创建者,并加入到全局服务列表中,可用于应用任何部分。
declarations 声明本模块中拥有的视图类。Angular 有三种视图类:组件、指令和管道。
exports declarations 的子集,可用于其它模块的组件模板。
bootstrap 指定应用的主视图(称为根组件),它是所有其它视图的宿主。只有根模块才能设置 bootstrap 属性。

2. CommonModule

先看一下CommonModule中有什么内容。

common.module.ts代码

@NgModule({imports: [NgZorroAntdModule,AngularCommonModule],declarations: [CommonComponent,NumberFilterPipe,ButtonDirective,StepComponent],exports: [CommonComponent,NumberFilterPipe,ButtonDirective,StepComponent],providers: [],
})

我在comon 文件夹中创建了service, pipe, component, directive,但是这个service和这个module没有任何关系。至于service会在下面说到。然后将pipe, component, directive输出,这样其他模块才能使用。

3. AngularModule

然后我们需要在其他的模块中使用这个模块,就需要import进来。
import { NgModule } from '@angular/core';
import { AngularComponent } from './angular.component';
import {RouterModule, Routes} from '@angular/router';
import {CommonModule as CommonPrivateModule} from '../../common/common.module';
import {CommonModule} from '@angular/common';
import {HttpService} from '../../common/service/http.service';
import {HttpCommonService} from '../../common/service/http-common.service';
import {BrowserModule} from '@angular/platform-browser';const routes: Routes = [{path: '', component:  AngularComponent}
];@NgModule({imports: [CommonModule,RouterModule.forChild(routes),CommonPrivateModule],declarations: [AngularComponent],providers: []
})
export class AngularModule { }

因为CommonModule与系统内的module重名,所以我重命名为CommonProvateModule。这样我们就可以在AngularModule中使用共享模块的内容。

angular.component.html

<p><app-step [stepString]="['common component']"></app-step><button appButton> common directive</button> <br>common pipe: {{1 | numberFilter}}
</p>

这个html文件中我使用了之前创建的StepComponent, NumberFilterPipe, ButtonDirective。

4. Service

service前面在Common的文件加下,但是没有在CommonModule provide。这是为什么呢,因为service靠Angular 的依赖注入体系实现的,而不是模块体系。如果我们在CommonModule provide,那么我们在各个模块使用的service不是一个实例,而是多个实例。下面我们就来测试一下。

先说一下例子的模块结构, AppModule,HomeModule(AppModule的子模块), AngularModule(HomeModule的子模块)。然后分别在三个模块中引入CommonModule。

修改一下上面的CommonModule,将HttpCommonService 提供出去。

@NgModule({imports: [NgZorroAntdModule,AngularCommonModule],declarations: [CommonComponent,NumberFilterPipe,ButtonDirective,StepComponent],exports: [CommonComponent,NumberFilterPipe,ButtonDirective,StepComponent],providers: [HttpCommonService],
})

HttpCommonService

import { Injectable } from '@angular/core';
import {Http, Request, RequestOptions} from '@angular/http';
import {Observable} from 'rxjs/Observable';
import {NzMessageService} from 'ng-zorro-antd';@Injectable()
export class HttpCommonService {private testService: number;constructor(public httpService: Http, private _message: NzMessageService) {}set(number) {this.testService = number;}get() {return this.testService;}
}

这里在service内部有两个方法,一个用于设置变量testService,一个用于取这个变量。

AppComponent

export class AppComponent implements OnInit {title = 'app';constructor(private httpCommonService: HttpCommonService) {}ngOnInit(): void {console.log('appmodule 取值之前的number:' + this.httpCommonService.get());this.httpCommonService.set(1);}
}

HomeCompoent

export class HomeComponent implements OnInit {constructor(private httpCommonService: HttpCommonService) { }ngOnInit() {console.log('homemodule 取值之前的number:' + this.httpCommonService.get());this.httpCommonService.set(2);}
}

AngularComponent

export class AngularComponent implements OnInit {firstString: string;constructor(private httpCommonService: HttpCommonService) { }ngOnInit() {console.log('angularmodule 取值之前的number:' + this.httpCommonService.get());}
}

最后看一下控制台的输出:

可以看到service内部的变量每一次都是一个新值。

然后我们在将CommonModule中的service去掉,就是这个公共模块不提供service。然后在将AppModule修改一下,提供HttpCommonService。 我们再看一下页面控制台的输出。

可以看到现在是一个实例,而且service内部的变量也是缓存起来的。

所以对于service我们还是放在模块中去提供,不要放在共享模块中了。

至于页面的模板可以访问angular - blank .

Angular4 - 共享模块相关推荐

  1. 在多个的共享ndk项目之间共享模块

    通过静态和共享的类库,共同的模块可以在模块间共享.然而,警告是所有这些模块式同样NDK项目的一部分.NDK运行共享和重复使用模块在NDK项目之间. 1.把这共享的如avilib的源代码移动到NDK项目 ...

  2. 探索 webpack5 新特性 Module federation 引发的javascript共享模块变革

    webpack5 新特性 Module federation 引言 什么是Module federation "模块联邦" Module federation "模块联邦 ...

  3. java idea 模块_java-项目之间共享模块的Intellij

    How do I share these modules between projects. 我要么有一个用于通用模块的项目,要么将它们添加到每个项目中. and what would I store ...

  4. angular4 新建模块

  5. 《Angular4从入门到实战》学习笔记

    <Angular4从入门到实战>学习笔记 腾讯课堂:米斯特吴 视频讲座 二〇一九年二月十三日星期三14时14分 What Is Angular?(简介) 前端最流行的主流JavaScrip ...

  6. 基于angular4+ng-bootstrap+bootstrap+scss的后台管理系统界面

    描述 在angular2刚才发布的不久,很多人不懂得怎么应用,直到现在也很多人不懂怎么用, 于是我在余业时间做了这么一个后台管理系统页面,希望对大家有帮助!! 从我个人的感觉来说,angular2语法 ...

  7. 《Angular4从入门到实战》学习笔记(图文)

    <Angular4从入门到实战>学习笔记 腾讯课堂:米斯特吴 视频讲座 二〇一九年二月十三日星期三14时14分 What Is Angular?(简介) 前端最流行的主流JavaScrip ...

  8. 程序员的自我修养--链接、装载与库笔记:Linux共享库的组织

    共享库(Shared Library)概念:其实从文件结构上来讲,共享库和共享对象没什么区别,Linux下的共享库就是普通的ELF共享对象.由于共享对象可以被各个程序之间共享,所以它也就成为了库的很好 ...

  9. 如何跨微服务共享DTO

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 1. 概述 近些年来,微服务变得越来越流行.微服务基本特征 ...

最新文章

  1. isis学不到looback口的路由_使用路由器后测速达不到宽带的网速怎么办?
  2. sim卡rfm_信用卡客户的RFM集群
  3. 整合MyBatis---SpringBoot
  4. 前端学习(2306):react之组件使用之图片使用
  5. 计算机二级考试答题无法启动ppt,计算机二级考试中操作题常见问题之[演示文稿]...
  6. 【转载】一步步构建大型网站架构
  7. 【CLR】解析CLR的托管堆和垃圾回收
  8. 光栅衍射C语言程序,基于matcom的光栅衍射仿真程序
  9. Discuz网站地图在线生成
  10. 自动化专业向往硬件方面靠,有什么好的建议?
  11. 读后感系列:2.《看见》柴静(三)
  12. Git冲突与解决方法
  13. 用坚果云同步mysql_坚果云安装完成以后, 如何同步文件?
  14. 全新MN梦奈宝塔主机系统V1.5版本源码
  15. power bi 雷达图_星载雷达与C波段地基雷达数据一致性个例分析 | 新文速递
  16. 怎样恢复计算机的开机桌面,电脑系统崩溃如何找回桌面文件?
  17. cerr和cout的使用
  18. 为什么要把DAO作为接口 再用impl类来实现?
  19. linux7删除lv后文件系统异常,使用c-spoc删除lv后出现怪异异常!(已解决)
  20. Zigbee使用MT层实现串口写和读操作,简要了解osal_msg_send消息机制

热门文章

  1. 如何激活和停用NVivo的许可证
  2. 【奇奇怪怪的bug】删除文件显示「找不到该项目」怎么办
  3. 计量经济学:多重共线性
  4. 主定理的证明及应用举例
  5. 《Parallel batch k-means for Big data clustering》 SCI (聚类k-means)
  6. C语言 :用条件语句 if 来做 三只小猪称体重
  7. AI开放平台-科大讯飞
  8. python describe include_数据分析pandas之DataFrame.describe() 用法概述
  9. 最适合程序员口味的10部电影
  10. 我的天空 我的未来 我的梦