在Angular中定义共享的Providers
转自:https://segmentfault.com/a/1190000010700308
有时,你需要在 Angular 应用中创建一个共享模块,该模块定义了功能模块和lazy-loaded模块可以使用的服务,管道与指令。一个小问题就是服务,通常应该作为单例的服务可能会被多次提供。幸运的是,对于我们来说,通过在共享模块中定义一个返回
ModuleWithProviders
对象的静态方法forRoot
,就可以轻松解决这个问题。
这是一个示例的实现,首先是我们定义的共享模块
//: ./shared/shared.module.ts import { NgModule, ModuleWithProviders } from '@angular/core'; import { MyDirective } from './my.directive';
import { FunPipe } from './fun.pipe';
import { SomeService } from './some.service'; @NgModule({
declarations: [
FunPipe,
MyDirective
],
exports: [
FunPipe,
MyDirective
]
})
export class SharedModule {
static forRoot(): ModuleWithProviders {
return {
ngModule:SharedModule,
providers:[ SomeService ]
};
}
}
注意,我们如何在NgModule
的元数据中像往常一样声明和导出我们的管道和指令,但是我们不提供服务。相反,我们在模块的类中定义一个静态方法forRoot
,该方法返回一个实现 Angular
的 ModuleWithProviders
接口的对象。
现在,在我们的应用模块中,我们可以导入共享模块并调用forRoot
静态方法来提供我们的服务:
//: app.module.ts
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { AppComponent } from './app.component';
import { SharedModule } from './shared/shared.module'; @NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
SharedModule.forRoot()
],
bootstrap: [
AppComponent
]
})
export class AppModule {}
你可能会注意到,你曾经在导入
RouterModule
模块并在应用程序中调用了静态方法forRoot
时看到了这一点。
最后,在任何功能模块中我们可以简单地导入没有forRoot
的共享模块,同时我们可以访问共享管道和指令,而不再提供服务:
//: some-feature.module.ts import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common'; import { SharedModule } from '../shared/shared.module'; //... @NgModule({
imports: [
CommonModule,
SharedModule
],
declarations: [
//...
]
})
export class SomeFeatureModule {}
就是如此简单!一个简单的小技巧,使它更容易使用共享模块和 lazy-loaded
模块。
在Angular中定义共享的Providers的更多相关文章
- VB.NET在基类中定义共享事件(类似于C#中的静态事件)
基类: Public Class userFun Private Shared _PnlStatus As String ‘必须设为共享字段,如果不设为Shared,将不能传递字符串内容 Public ...
- angular中定义全局变量及全局变量的使用
一个例子,定义了两个变量,并且把变量显示出来: <!DOCTYPE html> <html ng-app="myApp"> <head> < ...
- 定义一个共享数据块DB1 在DB1中定义一个数组 用程序 访问数据里面的某一个成员或者地址连续的成员
提纲 : 定义一个共享数据块 DB1 在DB1 中定义数组 用SFC21 实现 实现全部数组元素的赋一样的值 实现 给数组中的某一个元素赋值 实现 对数组中的全部元素赋值 实现将数组中的某个 或者 某 ...
- Angular中Constructor 和 ngOnInit 的本质区别
在Medium看到一篇Angular的文章,深入对比了 Constructor 和 ngOnInit 的不同,受益匪浅,于是搬过来让更多的前端小伙伴看到,翻译不得当之处还请斧正. 本文出处:The e ...
- angular中控制器之间传递参数的方式
在angular中,每个controller(控制器)都会有自己的$scope,通过为这个对象添加属性赋值,就可以将数据传递给模板进行渲染,每个$scope只会在自己控制器内起作用,而有时候需要用到其 ...
- angular中的compile和link函数
angular中的compile和link函数 前言 这篇文章,我们将通过一个实例来了解 Angular 的 directives (指令)是如何处理的.Angular 是如何在 HTML 中找到这些 ...
- Deferred在jQuery和Angular中的使用与简单实现
Deferred在jQuery和Angular中的使用与简单实现 Deferred是在jQuery1.5版本中加入的,并且jQuery使用它完全重写了AJax,以前也只是偶尔使用.但是上次在使用Ang ...
- angular源码分析:angular中脏活累活承担者之$parse
我们在上一期中讲 $rootscope时,看到$rootscope是依赖$prase,其实不止是$rootscope,翻看angular的源码随便翻翻就可以发现很多地方是依赖于$parse的.而$pa ...
- angular源码分析:angular中$rootscope的实现——scope的一生
在angular中,$scope是一个关键的服务,可以被注入到controller中,注入其他服务却只能是$rootscope.scope是一个概念,是一个类,而$rootscope和被注入到cont ...
随机推荐
- 微信小程序 --- 动态获取input的value
这里对 input 使用的是 bindinput 方法: <input type="text" bindinput="input"> <but ...
- Oracle Database Memory Structures
Oracle Database creates and uses memory structures for various purposes. For example, memory stores ...
- Css-常用css初始化
/*PC初始化*/ * {;;; } body, html { width: 100%; height: 100%; min-width: 1024px; } body { font-size: 14 ...
- Session的存储原理
一.session是怎么存储,提取的? 1.在服务器端有一个session池,用来存储每个用户提交session中的数据,Session对于每一个客户端(或者说浏览器实例)是“人手一份”,用户首次与W ...
- CentOS7使用yum安装LNMP环境以后无法打开php页面
CentOS7使用yum安装LNMP环境以后无法打开php页面 页面提示为File not found 查看nginx错误日志/var/log/nginx/error.log提示如下 原因分析 ngi ...
- Oracle之rman命令的使用(51CTO风哥rman课程)
看rman的连接串的帮助 连接数据库 rman target/ rman的版本要和目标数据库一致(一般大版本可以往下兼容小版本) 运行操作系统命令 run {host "pwd"; ...
- 用了快1年的MacBook Pro遇到的硬件问题
去年11月7日买的MacBook Pro,到目前快1年了,遇到了3个硬件问题(之前用了5年的Thinkpad在5年内未出现任何硬件问题): 1. 有一次MacBook放在背包中,背包拎在手上落在地上, ...
- 前端 html span标签
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- EasyUI Pagination 分页
通过 $.fn.pagination.defaults 重写默认的 defaults. 分页(pagination)允许用户通过翻页导航数据.它支持页面导航和页面长度选择的可配置选项.用户可以在分页的 ...
- SEO笔记:构建URL的15个SEO最佳实践
By: Rand Fishkin 原文链接:https://moz.com/blog/15-seo-best-practices-for-structuring-urls #1: Whenever p ...