Angular service providedIn VS forRoot









up vote
0
down vote

favorite












I'd like to know if these code



are equivalent or not.



Can I use providedIn



with the same result of



forRoot ?



Thanks in advance



@Injectable(
providedIn: 'root'
)
export class MyService
constructor()


VS

@Injectable()
export class MyService
constructor()


@NgModule(
imports:
)
export class MyModule
static forRoot(): ModuleWithProviders
return
ngModule: MyModule,
providers: [
MyService
]
;



@NgModule(
imports: [
MyModule.forRoot()
],
bootstrap: [AppComponent]
)
export class AppModule


[I would still keep my MyModule for single use with the providedId singleton services]










share|improve this question

























    up vote
    0
    down vote

    favorite












    I'd like to know if these code



    are equivalent or not.



    Can I use providedIn



    with the same result of



    forRoot ?



    Thanks in advance



    @Injectable(
    providedIn: 'root'
    )
    export class MyService
    constructor()


    VS

    @Injectable()
    export class MyService
    constructor()


    @NgModule(
    imports:
    )
    export class MyModule
    static forRoot(): ModuleWithProviders
    return
    ngModule: MyModule,
    providers: [
    MyService
    ]
    ;



    @NgModule(
    imports: [
    MyModule.forRoot()
    ],
    bootstrap: [AppComponent]
    )
    export class AppModule


    [I would still keep my MyModule for single use with the providedId singleton services]










    share|improve this question























      up vote
      0
      down vote

      favorite









      up vote
      0
      down vote

      favorite











      I'd like to know if these code



      are equivalent or not.



      Can I use providedIn



      with the same result of



      forRoot ?



      Thanks in advance



      @Injectable(
      providedIn: 'root'
      )
      export class MyService
      constructor()


      VS

      @Injectable()
      export class MyService
      constructor()


      @NgModule(
      imports:
      )
      export class MyModule
      static forRoot(): ModuleWithProviders
      return
      ngModule: MyModule,
      providers: [
      MyService
      ]
      ;



      @NgModule(
      imports: [
      MyModule.forRoot()
      ],
      bootstrap: [AppComponent]
      )
      export class AppModule


      [I would still keep my MyModule for single use with the providedId singleton services]










      share|improve this question













      I'd like to know if these code



      are equivalent or not.



      Can I use providedIn



      with the same result of



      forRoot ?



      Thanks in advance



      @Injectable(
      providedIn: 'root'
      )
      export class MyService
      constructor()


      VS

      @Injectable()
      export class MyService
      constructor()


      @NgModule(
      imports:
      )
      export class MyModule
      static forRoot(): ModuleWithProviders
      return
      ngModule: MyModule,
      providers: [
      MyService
      ]
      ;



      @NgModule(
      imports: [
      MyModule.forRoot()
      ],
      bootstrap: [AppComponent]
      )
      export class AppModule


      [I would still keep my MyModule for single use with the providedId singleton services]







      angular






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 11 at 18:28









      user3887366

      1213




      1213






















          3 Answers
          3






          active

          oldest

          votes

















          up vote
          0
          down vote



          accepted










          providedIn will directly injects the service based on the value - if its 'root' it will directly inject in root module - this will help you to stop adding your service in module [providers]



          Angular will inject the service in the module - If in case you are using Lazy loading modules - angular will create new injectors whenever you load other modules



          If you use Lazy loading is better to go with forRoot() injection on the modules and make sure your service doesn't create multiple injectors



          Hope this helps you - Happy coding !!



          Check this link for more info






          share|improve this answer






















          • So just in case of lazy loading are you sure using provideIn don't give you a singleton if you can build a simple running example I'd be most grateful :) thanks for the help
            – user3887366
            Nov 11 at 20:12










          • You can check that link for further clarification - thanks :)
            – Rahul
            Nov 12 at 3:47

















          up vote
          1
          down vote













          Using providedIn vs providers:



          1. providedIn is the new Angular way of doing DI. providedIn was brought since Angular 6


          2. The official name is "Tree-shakeable providers" - instead of module providing all its services, it is now the service itself declaring where it should be provided


          3. Using providedIn: 'root' removes the need to import the library module at all, we can simply inject needed services and it just works






          share|improve this answer




















          • Yes, in this way providedIn is better than forRoot Because it is more tree shakeable.
            – Pace
            Nov 11 at 18:48

















          up vote
          1
          down vote













          Yes, forRoot and provideIn both are equivalent since both will create the only and only one singleton for the app. Even though it being loaded in lazy loaded component.



          Refer this nice article on it - https://medium.com/@chrishouse/when-to-use-angulars-forroot-method-400094a0ebb7






          share|improve this answer




















            Your Answer






            StackExchange.ifUsing("editor", function ()
            StackExchange.using("externalEditor", function ()
            StackExchange.using("snippets", function ()
            StackExchange.snippets.init();
            );
            );
            , "code-snippets");

            StackExchange.ready(function()
            var channelOptions =
            tags: "".split(" "),
            id: "1"
            ;
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function()
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled)
            StackExchange.using("snippets", function()
            createEditor();
            );

            else
            createEditor();

            );

            function createEditor()
            StackExchange.prepareEditor(
            heartbeatType: 'answer',
            convertImagesToLinks: true,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: 10,
            bindNavPrevention: true,
            postfix: "",
            imageUploader:
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            ,
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            );



            );













            draft saved

            draft discarded


















            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53251849%2fangular-service-providedin-vs-forroot%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown

























            3 Answers
            3






            active

            oldest

            votes








            3 Answers
            3






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes








            up vote
            0
            down vote



            accepted










            providedIn will directly injects the service based on the value - if its 'root' it will directly inject in root module - this will help you to stop adding your service in module [providers]



            Angular will inject the service in the module - If in case you are using Lazy loading modules - angular will create new injectors whenever you load other modules



            If you use Lazy loading is better to go with forRoot() injection on the modules and make sure your service doesn't create multiple injectors



            Hope this helps you - Happy coding !!



            Check this link for more info






            share|improve this answer






















            • So just in case of lazy loading are you sure using provideIn don't give you a singleton if you can build a simple running example I'd be most grateful :) thanks for the help
              – user3887366
              Nov 11 at 20:12










            • You can check that link for further clarification - thanks :)
              – Rahul
              Nov 12 at 3:47














            up vote
            0
            down vote



            accepted










            providedIn will directly injects the service based on the value - if its 'root' it will directly inject in root module - this will help you to stop adding your service in module [providers]



            Angular will inject the service in the module - If in case you are using Lazy loading modules - angular will create new injectors whenever you load other modules



            If you use Lazy loading is better to go with forRoot() injection on the modules and make sure your service doesn't create multiple injectors



            Hope this helps you - Happy coding !!



            Check this link for more info






            share|improve this answer






















            • So just in case of lazy loading are you sure using provideIn don't give you a singleton if you can build a simple running example I'd be most grateful :) thanks for the help
              – user3887366
              Nov 11 at 20:12










            • You can check that link for further clarification - thanks :)
              – Rahul
              Nov 12 at 3:47












            up vote
            0
            down vote



            accepted







            up vote
            0
            down vote



            accepted






            providedIn will directly injects the service based on the value - if its 'root' it will directly inject in root module - this will help you to stop adding your service in module [providers]



            Angular will inject the service in the module - If in case you are using Lazy loading modules - angular will create new injectors whenever you load other modules



            If you use Lazy loading is better to go with forRoot() injection on the modules and make sure your service doesn't create multiple injectors



            Hope this helps you - Happy coding !!



            Check this link for more info






            share|improve this answer














            providedIn will directly injects the service based on the value - if its 'root' it will directly inject in root module - this will help you to stop adding your service in module [providers]



            Angular will inject the service in the module - If in case you are using Lazy loading modules - angular will create new injectors whenever you load other modules



            If you use Lazy loading is better to go with forRoot() injection on the modules and make sure your service doesn't create multiple injectors



            Hope this helps you - Happy coding !!



            Check this link for more info







            share|improve this answer














            share|improve this answer



            share|improve this answer








            edited Nov 11 at 18:56

























            answered Nov 11 at 18:50









            Rahul

            9381315




            9381315











            • So just in case of lazy loading are you sure using provideIn don't give you a singleton if you can build a simple running example I'd be most grateful :) thanks for the help
              – user3887366
              Nov 11 at 20:12










            • You can check that link for further clarification - thanks :)
              – Rahul
              Nov 12 at 3:47
















            • So just in case of lazy loading are you sure using provideIn don't give you a singleton if you can build a simple running example I'd be most grateful :) thanks for the help
              – user3887366
              Nov 11 at 20:12










            • You can check that link for further clarification - thanks :)
              – Rahul
              Nov 12 at 3:47















            So just in case of lazy loading are you sure using provideIn don't give you a singleton if you can build a simple running example I'd be most grateful :) thanks for the help
            – user3887366
            Nov 11 at 20:12




            So just in case of lazy loading are you sure using provideIn don't give you a singleton if you can build a simple running example I'd be most grateful :) thanks for the help
            – user3887366
            Nov 11 at 20:12












            You can check that link for further clarification - thanks :)
            – Rahul
            Nov 12 at 3:47




            You can check that link for further clarification - thanks :)
            – Rahul
            Nov 12 at 3:47












            up vote
            1
            down vote













            Using providedIn vs providers:



            1. providedIn is the new Angular way of doing DI. providedIn was brought since Angular 6


            2. The official name is "Tree-shakeable providers" - instead of module providing all its services, it is now the service itself declaring where it should be provided


            3. Using providedIn: 'root' removes the need to import the library module at all, we can simply inject needed services and it just works






            share|improve this answer




















            • Yes, in this way providedIn is better than forRoot Because it is more tree shakeable.
              – Pace
              Nov 11 at 18:48














            up vote
            1
            down vote













            Using providedIn vs providers:



            1. providedIn is the new Angular way of doing DI. providedIn was brought since Angular 6


            2. The official name is "Tree-shakeable providers" - instead of module providing all its services, it is now the service itself declaring where it should be provided


            3. Using providedIn: 'root' removes the need to import the library module at all, we can simply inject needed services and it just works






            share|improve this answer




















            • Yes, in this way providedIn is better than forRoot Because it is more tree shakeable.
              – Pace
              Nov 11 at 18:48












            up vote
            1
            down vote










            up vote
            1
            down vote









            Using providedIn vs providers:



            1. providedIn is the new Angular way of doing DI. providedIn was brought since Angular 6


            2. The official name is "Tree-shakeable providers" - instead of module providing all its services, it is now the service itself declaring where it should be provided


            3. Using providedIn: 'root' removes the need to import the library module at all, we can simply inject needed services and it just works






            share|improve this answer












            Using providedIn vs providers:



            1. providedIn is the new Angular way of doing DI. providedIn was brought since Angular 6


            2. The official name is "Tree-shakeable providers" - instead of module providing all its services, it is now the service itself declaring where it should be provided


            3. Using providedIn: 'root' removes the need to import the library module at all, we can simply inject needed services and it just works







            share|improve this answer












            share|improve this answer



            share|improve this answer










            answered Nov 11 at 18:40









            TheUnreal

            6,2492682156




            6,2492682156











            • Yes, in this way providedIn is better than forRoot Because it is more tree shakeable.
              – Pace
              Nov 11 at 18:48
















            • Yes, in this way providedIn is better than forRoot Because it is more tree shakeable.
              – Pace
              Nov 11 at 18:48















            Yes, in this way providedIn is better than forRoot Because it is more tree shakeable.
            – Pace
            Nov 11 at 18:48




            Yes, in this way providedIn is better than forRoot Because it is more tree shakeable.
            – Pace
            Nov 11 at 18:48










            up vote
            1
            down vote













            Yes, forRoot and provideIn both are equivalent since both will create the only and only one singleton for the app. Even though it being loaded in lazy loaded component.



            Refer this nice article on it - https://medium.com/@chrishouse/when-to-use-angulars-forroot-method-400094a0ebb7






            share|improve this answer
























              up vote
              1
              down vote













              Yes, forRoot and provideIn both are equivalent since both will create the only and only one singleton for the app. Even though it being loaded in lazy loaded component.



              Refer this nice article on it - https://medium.com/@chrishouse/when-to-use-angulars-forroot-method-400094a0ebb7






              share|improve this answer






















                up vote
                1
                down vote










                up vote
                1
                down vote









                Yes, forRoot and provideIn both are equivalent since both will create the only and only one singleton for the app. Even though it being loaded in lazy loaded component.



                Refer this nice article on it - https://medium.com/@chrishouse/when-to-use-angulars-forroot-method-400094a0ebb7






                share|improve this answer












                Yes, forRoot and provideIn both are equivalent since both will create the only and only one singleton for the app. Even though it being loaded in lazy loaded component.



                Refer this nice article on it - https://medium.com/@chrishouse/when-to-use-angulars-forroot-method-400094a0ebb7







                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Nov 11 at 18:42









                Sunil Singh

                6,1122626




                6,1122626



























                    draft saved

                    draft discarded
















































                    Thanks for contributing an answer to Stack Overflow!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid


                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.

                    To learn more, see our tips on writing great answers.





                    Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


                    Please pay close attention to the following guidance:


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid


                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.

                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function ()
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53251849%2fangular-service-providedin-vs-forroot%23new-answer', 'question_page');

                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    這個網誌中的熱門文章

                    Barbados

                    How to read a connectionString WITH PROVIDER in .NET Core?

                    Node.js Script on GitHub Pages or Amazon S3