[Angular] Tree shakable provider

When we create a Service, Angluar CLI will helps us to add:

@#Injectable({
  providedIn: ‘root‘
})

It only create a instance in root dependency tree. If there is no reference to use this provider, Angular will remove it from our production code.

But the service we created are Class based service, what if we want to create some Object and inject this Object to our application and we want to make it tre shakable as well.

We can do as following:

import { InjectionToken } from "@angular/core";
export interface AppConfig {
  apiUrl: string;
  courseCacheSize: number;
}

export const APP_CONFIG: AppConfig = {
  apiUrl: "http://localhost:9000",
  courseCacheSize: 10
};

// Use providedIn & factory to make it as tree shakable provider.
export const CONFIG_TOKEN = new InjectionToken<AppConfig>("CONFIG_TOKEN", {
  providedIn: "root",
  factory: () => APP_CONFIG
});

// Not tree shakable
// export const CONFIG_TOKEN = new InjectionToken<AppConfig>("CONFIG_TOKEN");

Whereever you use the provider, you need to remove it:

@Component({
  selector: "app-root",
  templateUrl: "./app.component.html",
  styleUrls: ["./app.component.css"],
  // Remove it when need to use tree shakable provider
  providers: [{ provide: CONFIG_TOKEN, useValue: APP_CONFIG }]
})

原文地址:https://www.cnblogs.com/Answer1215/p/10299461.html

时间: 2024-10-19 00:01:39

[Angular] Tree shakable provider的相关文章

Angular 学习笔记——$provider

<!DOCTYPE HTML> <html ng-app="myApp"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>无标题文档</title> <script src="angular.min.js"></scrip

ionic准备之angular基础———服务provider 和 factory(9)

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body ng-app="myApp"> <div ng-controller="firstController"> <ul>

angular内置provider之$compileProvider

一.方法概览 directive(name, directiveFactory) component(name, options) aHrefSanitizationWhitelist([regexp]); imgSrcSanitizationWhitelist([regexp]); debugInfoEnabled([enabled]); strictComponentBindingsEnabled([enabled]); onChangesTtl(limit); commentDirecti

angular service provider

关于  angular service factory  provider 方面有很多,我也来写一篇加深下印象. provider 是一切方法的基础,所以功能也最强,provider 用来定义一个可以被注入的服务,其实就是一个依赖注入的模块. 已ng-route 为例 var ngRouteModule = angular.module('ngRoute', ['ng']). provider('$route', $RouteProvider); 等价  AngularJS在模块对象上直接暴露了

angular 服务 service factory provider constant value

angular服务 服务是对公共代码的抽象,由于依赖注入的要求,服务都是单例的,这样我们才能到处注入它们,而不用去管理它们的生命周期. angular的服务有以下几种类型: 常量(Constant): 用于声明不会被修改的值. 变量(Value): 用于声明会被修改的值. 服务(Service): 这个名称跟服务这个大概念同名,就种行为就像是给自己孩子取名为"孩子".只需要创建这个服务,然后等angular把它new出来,保存这个服务,然后就可以到处注入了. 工厂(Factory): 

angular 项目回顾

从学习angular,到实际项目开发不到一周,完全是边写边学呀,都是为了项目,已使用angular 开发了两个项目了,有些技术当时只是会用,都没好好回顾一下,现在有时间回顾一下,项目中用到的一些指令,服务,路由,filter 等, 一点点记录一来 // 初始化 angular.bootstrap(dom,['appName']); //html 转化 // 需传参 $sce $scope.escape = function(html) { return $sce.trustAsHtml(html

angular五种服务详解

在这之前angular学习笔记(十五)-module里的'服务'这篇文章里,已经大致讲解了ng中的'服务',在之后的很多地方也用到了服务,但是,所有的服务都是使用app.factory来创建的.但其实,创建服务有5种方法,这篇文章就来具体讲解ng中的五种服务类型. 首先,为了举栗子,先写好如下的模型,控制器,html: html: <!DOCTYPE html> <html ng-app="serviceApp"> <head> <title&

angular编译机制

转载https://segmentfault.com/a/1190000011562077 Angular编译机制 前言 这是我用来进行实验的代码,它是基于quickstart项目,并根据aot文档修改得到的.各位可以用它来进行探索,也可以自己基于quickstart进行修改(个人建议后者). 2018年2月17日更新:最近又做了2个小Demo用来研究Angular的编译和打包,基于Angular5,一个使用rollup,一个使用webpack,(rollup目前无法做到Angular的lazy

AngularJS 2 Provider

依赖注入(DI) 是 Angular 2 的核心,在深入了解DI的工作原理之前,我们必须先搞清楚 Provider 的概念. 在 Angular 2 中我们使用 Provider 来描述与 Token 关联的依赖对象的创建方式.Angular 2 中依赖对象的创建方式有四种,它们分别是: useClass useValue useExisting useFactory useClass @Injectable() export class ApiService {   constructor(