Angular 7-整个应用程序的全局HTTP拦截器

时间:2018-12-15 07:57:56

标签: angular typescript lazy-loading angular7 angular-http-interceptors

在我的class PostController < ApplicationController after_action :notify_users, only: [:create] ... def notify_users @post.mentioned_users.each do |user| Notification.create!(recipient: user, actor: @post.user, action: 'mentioned', notifiable: self) end end end 中,我注册了一个HTTP拦截器,如下所示:

class Post < ApplicationRecord

  def mentions
    @mentions ||= begin
      regex = /@([\w]+)/
    matches = self.body.scan(regex).flatten
   end
  end

  def mentioned_users
    @mentioned_users ||= User.where(username: self.mentions)
  end

end

但是,从延迟加载的模块发出的请求不使用拦截器。 它也仅在延迟加载的模块中注册HTTP拦截器时有效。

但是我只想在app.module.ts中提供一次。

关于如何执行此操作的任何想法?还是我必须在每个模块中提供它?

2 个答案:

答案 0 :(得分:0)

这就是我所做的,以使其正常运行。 感谢@David和@JB Nizet

app.module.ts app module

lazy loaded module lazy loaded module

interceptor.service.ts interceptor

答案 1 :(得分:0)

我认为您所发生的情况与this GitHub thread相似。 JB Nizet在他的评论中也可能提到了同一件事。

您很可能已将HttpClientModule添加到imports的{​​{1}}数组中。因此,它没有使用InterceptorService。要使其工作,只需从那里摆脱掉。完成后,它将使用全局HTTP拦截器服务。


  

这是您推荐的Working Sample StackBlitz