@ViewChild(‘myname’, {read: ViewContainerRef}) target : ViewContainerRef;

@ViewChild(‘myname’, {read: ViewContainerRef}) target : ViewContainerRef;

所支持的选择器包括: 任何带有 @Component 或 @Directive 装饰器的类 字符串形式的模板引用变量(比如可以使用 @ViewChild(‘cmp’) 来查询 <my-component #cmp></my-component> 组件树中任何当前组件的子组件所定义的提供商(比如 @ViewChild(SomeService) someService: SomeService ) 任何通过字符串令牌定义的提供商(比如 @ViewChild(‘someToken’) someTokenVal: any ) TemplateRef(比如可以用 @ViewChild(TemplateRef) template; 来查询 <ng-template></ng-template>) @ViewChild(‘myname’, {read: ViewContainerRef}) target : ViewContainerRef; The following is an explanation to read: There can be several instances…

Read More Read More

HTML5 File API, FormData and examples

HTML5 File API, FormData and examples

File API: https://developer.mozilla.org/en-US/docs/Web/API/File/Using_files_from_web_applications File Reader: https://developer.mozilla.org/en-US/docs/Web/API/FileReader FormData: https://developer.mozilla.org/en-US/docs/Web/API/FormData Useage in Angular: https://www.cnblogs.com/zero-zm/p/9859171.html

Angular request and response Interceptor usage

Angular request and response Interceptor usage

请求拦截器 (Request Interceptor) 如果我们想要注册新的拦截器 (interceptor),我们需要实现 HttpInterceptor 接口,然后实现该接口中的 intercept 方法。 需要注意的是,请求对象和响应对象必须是不可修改的 (immutable)。因此,我们在返回请求对象前,我们需要克隆原始的请求对象。 next.handle(req) 方法使用新的请求对象,调用底层的 XHR 对象,并返回响应事件流。 响应拦截器 (Response Interceptor) 响应拦截器可以通过在 next.handle(req) 返回的流对象 (即 Observable 对象) 上应用附加的 Rx 操作符来转换响应事件流对象。 接下来要应用 JWTInterceptor 响应拦截器的最后一件事是注册该拦截器,即使用 HTTP_INTERCEPTORS 作为 token,注册 multi Provider: More examples: For Angular6+ and RXJS6+:

The execution priorities of Laravel’s middlewares

The execution priorities of Laravel’s middlewares

Laravel 多个中间件的执行顺序 问题 一个路由需要用到多个中间件,其中一个是 Laravel 自带的 auth 中间件。 发现这个中间件不管放在哪里,总是在自定义中间件之前执行。 如果业务需要自定义中间在 auth 之前执行,还是有办法的。 解决方案 观察定义中间件的 app\Http\Kernel 类,是继承的 Illuminate\Foundation\Http\Kernel 类。 再打开 Illuminate\Foundation\Http\Kernel ,发现有这样一个数组 注释里写得比较清楚了:列表中的中间件会按照顺序优先在其他中间件之前执行。 那么需要自定义中间件在 auth 之前执行,只需要在 app\Http\Kernel 重载这个数组就行了。 auth 中间件对应的类 \Illuminate\Auth\Middleware\Authenticate,…

Read More Read More

Angular singleton service

Angular singleton service

在 Angular 中有三种方式来生成单例服务: 把 @Injectable() 的 providedIn 属性声明为 root。 把该服务包含在 AppModule 或某个只会被 AppModule 导入的模块中。 1. 使用 providedIn 从 Angular 6.0 开始,创建单例服务的首选方式就是在那个服务类的 @Injectable 装饰器上把 providedIn 设置为 root。这会告诉 Angular 在应用的根上提供此服务。src/app/user.service.ts content_copyimport { Injectable } from ‘@angular/core’; @Injectable({ providedIn: ‘root’, }) export class UserService { } 2. NgModule…

Read More Read More

Angular Injector usage

Angular Injector usage

Angular 中注入器是有层级结构的,即创建完注入器,我们可以基于它创建它的子注入器。 resolveAndCreate() – 根据设置的 provider 数组创建注入器 resolveAndCreateChild() – 调用已有注入器对象上的该方法,创建子注入器 当调用注入器 get() 方法,获取 token 对应的对象时,默认的查找方式是,优先从本级注入级获取,如果未找到,则往上一级查找,直到根级注入器。若未找到对应的依赖对象,默认会抛出异常。 使用示例 通过分析源码,我们也发现如果两个服务提供商 (Provider) 使用同一个 Token,却没有声明为 multiprovider,那么后面的会把前面的覆盖掉。此外需要注意的是,multiprovider 不能与普通的 provider 混用。 @Self()、@SkipSelf()、@Optional() 等装饰器有什么作用? @Self() – 表示只在本级注入器查找依赖对象 @SkipSelf() – 表示不从本级注入器获取依赖对象…

Read More Read More

Forwarded: ngzone usage

Forwarded: ngzone usage

NgZone的简单使用   在Angular4中,如果模板中有一些变量在组件中经常变动,比如变量foo。 <div> 我经常变动: {{ foo }} </div>   在组件中它的初始值为0。 foo = 0;   假设在组件中有个循环,不断更新foo的值。 for (let i = 0; i < 100; i++) { setInterval(() => this.counter++, 10); }   那么频繁的变动将造成性能损耗。   Angular为我们提供了NgZone服务,对于一些频繁的操作,可以不去触发变更检测。…

Read More Read More