APP_INITIALIZER Token in Angular (Advanced, 2022)

Поделиться
HTML-код
  • Опубликовано: 4 авг 2024
  • In real Angular applications, it might happen that you need to perform some logic or pull the data even before Angular will start rendering the very first component. So basically, we want to have something like ngOnInit lifecycle hook but for the whole application. This is where the APP_INITIALIZER token in Angular comes into play! In this video, you will see how to use this token and what you should pay attention to. If you find this video useful you can support my channel by sharing this video on your Social Media!
    💥 Angular courses made by Dmytro - bit.ly/df-courses 💥
    ✂️ Use coupon RUclips_DISCOUNT to get a 10%-off discount ✂️
    🕒 Time Codes:
    00:00:00 - Intro;
    00:00:20 - Why would we need to hook into the app initialization process?
    00:02:30 - Basic APP_INITIALIZER usage;
    00:09:56 - Feature Description;
    00:10:54 - Feature Implementation (fetching config from the server);
    00:23:18 - Outro;
    🔗 Source code on GitHub (init state on the master branch):
    github.com/DMezhenskyi/angula...
    ↙️ Short Frontend Snacks every week here:
    Twitter - / decodedfrontend
    Instagram - / decodedfrontend
    LinkedIn - / dmezhenskyi
    #angular #angular14 #angularadvanced #ng
  • ХоббиХобби

Комментарии • 94

  • @DecodedFrontend
    @DecodedFrontend  2 года назад +15

    If you want to support my channel and you find my content useful I would be grateful if you share it with your colleagues and friends. Thank you!🙏

  • @dimitridovgan6364
    @dimitridovgan6364 2 года назад +1

    Best Angular Tutorials!

  • @oleksandrvorovchenko8674
    @oleksandrvorovchenko8674 2 года назад

    Great and useful as always! Thanks.

  • @ayoubalfurjani4531
    @ayoubalfurjani4531 Год назад

    This video was just right!, and my use case was exactly the same as the one mentioned in the example.
    Overall a great video. Keep it up

  • @OscarAndresPabonEstrella
    @OscarAndresPabonEstrella 2 года назад +2

    Your videos have helped me a lot, is not easy to find those kind of advanced things related with angular. Thanks a lot :)

  • @innocentmazando3808
    @innocentmazando3808 Год назад

    I knew I was gonna need this video and now I am using it at work.
    Thanks for the great video sir

  • @mohamedsami5078
    @mohamedsami5078 2 года назад

    Great content as always.

  • @yorikworld
    @yorikworld 2 года назад

    Дякую, крутий контент.

  • @Nabulio85
    @Nabulio85 Год назад +1

    Dmytro, award of best Angular instructor 🙏
    Thank you very much.

  • @user-rg7ij6yo8t
    @user-rg7ij6yo8t Год назад

    Great tutorial and very informative, thanks!

  • @nanasarathi
    @nanasarathi 2 года назад +1

    You are a very good teacher... it was very informative. Thanks for sharing this video.

  • @TheNicoad
    @TheNicoad Год назад

    Your youtube channel is pure gold bar, hope you know it and feel good about it

  • @MP3D2Y
    @MP3D2Y 2 года назад

    Nice video! Now I can understand better what is happening behind scenes when using that token privider

  • @alextiger548
    @alextiger548 Год назад

    Good stuff. Thank you!

  • @djedaaa2232
    @djedaaa2232 Год назад

    Helped me! Gread video!

  • @malyna
    @malyna 2 года назад +1

    Чудове пояснення, думаю було б круто зробити окрему серію відео по розбіру сорсів!

  • @thesweetvishu
    @thesweetvishu 2 года назад +1

    Great one...

  • @andrija-official
    @andrija-official Год назад

    Great! Thank you

  • @malbarmavi
    @malbarmavi Год назад +1

    super good 😭😁👏👏

  • @dimitritsikaridze6220
    @dimitritsikaridze6220 2 года назад

    Great content as always. video tutorial on angular elements would be nice there isn’t much on youtube that is up to date

  • @vitaliyboyanivskyy1225
    @vitaliyboyanivskyy1225 2 года назад +2

    Дякую за контент)

    • @DecodedFrontend
      @DecodedFrontend  2 года назад

      Будь ласка 😉 Заходьте ще))

  • @user-fg6ng7ej6w
    @user-fg6ng7ej6w Год назад

    очень толковые содержательные видосы, спасибо. вся эта серия про DI крута

  • @horic007
    @horic007 2 года назад +1

    Awesome content! 👏🏻

  • @demidovmaxim1008
    @demidovmaxim1008 2 года назад +1

    Cool. Thank you for this video!

  • @MarceloLopesS
    @MarceloLopesS Год назад +6

    Hi, would you mind making a video about push-based architecture? I'd love to learn more how to use it and why. Reactive Angular seems very sophisticated

  • @innocentmazando3808
    @innocentmazando3808 2 года назад +1

    Powerful content as usual, thanks man

  • @sechabamothobi2616
    @sechabamothobi2616 10 месяцев назад

    Amazing

  • @volodimiryemshyn715
    @volodimiryemshyn715 2 года назад

    Nice, thanks you. Lately I had problem with one task. I used resolver but I can't use it in app component, this way will help me. You are really nice person!!!)

  • @vlads3856
    @vlads3856 2 года назад +1

    Awesome content!

  • @ansumanmishra9608
    @ansumanmishra9608 Год назад +1

    Great tutorial! Keep up the good work 🙂

  • @ianvink
    @ianvink 2 года назад +2

    This was an excellent video.

  • @shumilus
    @shumilus 2 года назад +1

    Thanks

  • @ivanco_s
    @ivanco_s 2 года назад +1

    cool, thanks for making content like this 🙂

  • @Nurtylek
    @Nurtylek 2 года назад +6

    I don’t think it’s a good idea to subscribe inside service, u could do it inside tap operator

  • @vigneshwaran6410
    @vigneshwaran6410 2 года назад +1

    Awesome content😃, make more videos like this.

  • @sandeepdravidam7989
    @sandeepdravidam7989 2 года назад

    Great Content n Awesome way of explaining as always. Can u make a video on how to do
    @supercharge/promise-pool npm package like flow in Observable way . It would be great video to learn. It would be challenging for u n great learning for us 😉

  • @vpeti88
    @vpeti88 2 года назад

    Thanks for the excellent videos!
    Can you help me? Can you make a video about a plugin architecture with auto discorvery, anyway it's possible in frontend framework?

  • @JoeBoo532
    @JoeBoo532 Месяц назад

    Hi, could you please explain the benefits of assigning the response results to an observable instead of just using an array? Thank you!
    loving your vid by the way! :D

  • @exsitewebsolution6803
    @exsitewebsolution6803 Год назад

    hi great tut as usual! Could app_intializer be used to create a webmanifest dynamically? so that we can white label our APP to suit multiple customers.

  • @jakubdrewniak2668
    @jakubdrewniak2668 Год назад

    that is really nice approach, I didn't know that. but how does it different from making this kind of initialization in AppModule constructor? are there any advantages besides blocking app initialization before data from api is resolved? (of course this is huge advantage, I'm just wondering if there are more?)

  • @DenisBendrikov
    @DenisBendrikov 2 года назад +5

    Thanks a lot for showing how it works under the hood.
    Also it is worth mentioning that APP_INITIALIZER doesn't work if used in lazy loaded feature modules

    • @DecodedFrontend
      @DecodedFrontend  2 года назад +4

      Thank you for the addition! You are absolutely right.
      Regarding 'under the hood' stuff, should I do dive more in the source code? :)

    • @DenisBendrikov
      @DenisBendrikov 2 года назад +1

      @@DecodedFrontend in your videos you do a great job with a high-level source code overview 👍 so I better leave you the choice of how deep you should dive

    • @DecodedFrontend
      @DecodedFrontend  2 года назад

      @@DenisBendrikov got you! Thanks 😊

  • @blokche_dev
    @blokche_dev 2 года назад +1

    👍 Thanks for the valuable content you create and share. Do you plan to dig further into Angular CDK?

    • @DecodedFrontend
      @DecodedFrontend  Год назад +1

      Thanks for the feedback! Yes, I plan also the course about CDK :)

  • @isasunasra9910
    @isasunasra9910 Год назад

    Hello, first of all, thank you for all the amazing content.
    I wanted to know if there's a way to show some loader while APP_INITIALIZER is doing its job.

  • @johnlambertasis6620
    @johnlambertasis6620 2 года назад

    Thank you sir, but can u do a tutorial about MEAN stack like doing something projects such as cloning twitter, facebook or something that can be cloned. Highly appreciated all your videos sir! Keep it up!

  • @deniskoliban6664
    @deniskoliban6664 2 года назад +1

    Great video, thank you Dmytro😃. I think you don't need to use asObservable() if you use pipe() on BS, because pipe returns an observable)

    • @DecodedFrontend
      @DecodedFrontend  Год назад +10

      Hi Denis! it is a good point that made me actually investigate this a little bit this question and I found something interesting :) It turns out, that .asObservable() and .pipe() are not completely equivalent. The pipe() on BS returns actually the BehaviorSubject but the trick is that the .pipe() method narrows the return type to Observable, so TypeScript won't allow you to call the next() method though it actually BS. You can hack it using something like that `(this.endpoints.pipe() as any).next('value')` and in such a way emit a new value to the stream. But when you do `(this.endpoints.asObservable() as any).next('value')` you will get an runtime error because asObservable() returns actually the Observable that doesn't have next() method at all :) So... it seems like asObservable() is safer/stricter but while you use TypeScript I think it is ok to use both approaches.

  • @hoangducnguyen8887
    @hoangducnguyen8887 Год назад

    Hey @DecodedFrontend, what's your desk setup?

  • @Afdac247
    @Afdac247 2 года назад

    Also in addition I have a problem with my bundle sizes if you ever worked with three.js you will know that they don't have esm modules, so no tree-shaking and there for the whole 500 kb gets bundled into the final app, I feel that I would have to download the package in a standalone project rebuild it some so their exports can be converted to be available as es import would you like to connect to discuss

  • @alpinestylecom
    @alpinestylecom 2 года назад +1

    Great Video. Why not just use a classic resolver for App Component instead?

    • @DecodedFrontend
      @DecodedFrontend  2 года назад +1

      Thanks for the question! A couple of reasons:
      1) Resolvers will be invoked after the App Component is created.
      2) Resolvers are used when you resolve some data for some certain route but app config usually isn't something that depends on the Router.

  • @miroslavpetrov3006
    @miroslavpetrov3006 5 месяцев назад

    Great, now how do I preload my LCP image

  • @_Greenflag_
    @_Greenflag_ Год назад

    Why do you need to convert a behaviourSubject, which is an observable, to an observable using asObservable( ) method ? To use a copy of it, similar to the slice ( ) method on array ?

  • @1997jugulator
    @1997jugulator 6 месяцев назад

    I'm wondering what is the benefit from using asObservable in service?

  • @m3kbeatz
    @m3kbeatz 5 месяцев назад +1

    But why app_initilazier doesn't block imported modules?

  • @AlphaFrog1021
    @AlphaFrog1021 2 года назад

    there aren’t many tutorials on angular SSR

  • @sunilvilluri385
    @sunilvilluri385 Год назад +1

    @Decoded Frontend - I want to know how you are able to see the actual code implementation instead of d.ts files. Can you provide steps to do it

    • @chikkachokka3401
      @chikkachokka3401 Год назад

      you got it sunil? if yes, can you please share?

    • @sunilvilluri385
      @sunilvilluri385 Год назад +1

      @@chikkachokka3401 - there is a shift between editors which was trimmed in editing. There is no straight way to get it

  • @beratsulimani9823
    @beratsulimani9823 2 года назад +1

    Hi Dimitry,
    Thanks for the great content, can APP_INITIALIZER be used for a fully standalone project.

    • @DecodedFrontend
      @DecodedFrontend  2 года назад

      Do you mean if the project uses standalone components?

    • @beratsulimani9823
      @beratsulimani9823 2 года назад

      @@DecodedFrontend Yes Dimitry, without ngModules how APP_INITIALIZER can be used?

    • @DecodedFrontend
      @DecodedFrontend  2 года назад +1

      @@beratsulimani9823 then you have to provide APP_INITIALIZER token in the ``` bootstrapApplication(AppComponent, {
      providers: [
      { provide: APP_INITIALIZER... }
      ]
      }) ```
      like that

    • @DecodedFrontend
      @DecodedFrontend  2 года назад +2

      it is inside main.ts file

    • @beratsulimani9823
      @beratsulimani9823 2 года назад

      Thanks a lot Dimitry.

  • @MrBan001
    @MrBan001 Год назад

    What do i have to do if i want to use that config in another APP_Initializer?

    • @DecodedFrontend
      @DecodedFrontend  Год назад

      You could save the fetched config in a separate service which is provided for the same injector where APP_Initializer token.

  • @Alessandro_Russo
    @Alessandro_Russo Год назад

    When a complete overview about providers?

  • @olegshyshka5948
    @olegshyshka5948 2 года назад

    Thanks for support the Ukraine.

  • @haroldpepete
    @haroldpepete 2 года назад

    brutal video, if you ever need a liver or heart, let me know

  • @denysdzhelomanov2633
    @denysdzhelomanov2633 2 года назад +1

    You don't need to write asObservable function before pipe, pipe func does the same job

    • @DecodedFrontend
      @DecodedFrontend  Год назад +1

      Hi Denys! Thanks for your comment :) I already answered a similar comment, so if you don't mind I will just duplicate the answer here: "it is a good point that made me actually investigate this a little bit this question and I found something interesting :) It turns out, that .asObservable() and .pipe() are not completely equivalent. The pipe() on BS returns actually the BehaviorSubject but the trick is that the .pipe() method narrows the return type to Observable, so TypeScript won't allow you to call the next() method though it actually BS. You can hack it using something like that `(this.endpoints.pipe() as any).next('value')` and in such a way emit a new value to the stream. But when you do `(this.endpoints.asObservable() as any).next('value')` you will get an runtime error because asObservable() returns actually the Observable that doesn't have next() method at all. So... it seems like asObservable() is safer/stricter but while you use TypeScript I think it is ok to use both approaches"

  • @hubert.t4243
    @hubert.t4243 2 года назад

    Hi Dymitro. To go further up the tree, can I also use PLATFORM_INITIALIZER within the argument of platformBrowserDynamic in the main.ts and this will resolve before anything resolved within the APP_INITIALIZER. Thanks

    • @DecodedFrontend
      @DecodedFrontend  Год назад

      Yes, it is. PLATFORM_INITIALIZERs are being executed befor APP_INITIALIZERs :)