Subscriber not assigned on Observable create












1















I am doing this in code in order to handle multiple views from multiple components



https://stackblitz.com/edit/angular-cy8jza
(check the console for the error)



export class ViewGroup {
_onViewChanged: any;
OnViewChanged$ : Observable<any>;
_onViewAdded: any;
OnViewAdded$ : Observable<any>;
_onViewRemoved: any;
OnViewRemoved$ : Observable<any>;

viewsSet = new Set<string>();
currentView = "";
previousView = "";

constructor(){
this.OnViewChanged$ = Observable.create(obs => this._onViewChanged = obs);
this.OnViewAdded$ = Observable.create(obs => this._onViewAdded = obs);
this.OnViewRemoved$ = Observable.create(obs => this._onViewRemoved = obs);
}
}


somnwhere in the code I do



this._availableView.set(name,  new ViewGroup());


and then call



this._availableView.get(group)._onViewAdded.next(view);


but I can't call the next on it, it s say undefined.



It's exactly the same procedure has



this.onGroupAdded$ = Observable.create(e => this._onGroupAdded = e)


but this one work in stackblitz.



EDIT : I found out that the method I pass inside the create is not called until I subscribe to it. I have to do this to make everything works :



this.OnViewChanged$ = Observable.create((obs) => {this._onViewAdded = obs});
this.OnViewAdded$ = Observable.create((obs) => {this._onViewAdded = obs});
this.OnViewRemoved$ = Observable.create((obs) => {this._onViewAdded = obs});
this.OnViewChanged$.subscribe();
this.OnViewAdded$.subscribe();
this.OnViewRemoved$.subscribe();


Is there any way to avoid it ?










share|improve this question





























    1















    I am doing this in code in order to handle multiple views from multiple components



    https://stackblitz.com/edit/angular-cy8jza
    (check the console for the error)



    export class ViewGroup {
    _onViewChanged: any;
    OnViewChanged$ : Observable<any>;
    _onViewAdded: any;
    OnViewAdded$ : Observable<any>;
    _onViewRemoved: any;
    OnViewRemoved$ : Observable<any>;

    viewsSet = new Set<string>();
    currentView = "";
    previousView = "";

    constructor(){
    this.OnViewChanged$ = Observable.create(obs => this._onViewChanged = obs);
    this.OnViewAdded$ = Observable.create(obs => this._onViewAdded = obs);
    this.OnViewRemoved$ = Observable.create(obs => this._onViewRemoved = obs);
    }
    }


    somnwhere in the code I do



    this._availableView.set(name,  new ViewGroup());


    and then call



    this._availableView.get(group)._onViewAdded.next(view);


    but I can't call the next on it, it s say undefined.



    It's exactly the same procedure has



    this.onGroupAdded$ = Observable.create(e => this._onGroupAdded = e)


    but this one work in stackblitz.



    EDIT : I found out that the method I pass inside the create is not called until I subscribe to it. I have to do this to make everything works :



    this.OnViewChanged$ = Observable.create((obs) => {this._onViewAdded = obs});
    this.OnViewAdded$ = Observable.create((obs) => {this._onViewAdded = obs});
    this.OnViewRemoved$ = Observable.create((obs) => {this._onViewAdded = obs});
    this.OnViewChanged$.subscribe();
    this.OnViewAdded$.subscribe();
    this.OnViewRemoved$.subscribe();


    Is there any way to avoid it ?










    share|improve this question



























      1












      1








      1








      I am doing this in code in order to handle multiple views from multiple components



      https://stackblitz.com/edit/angular-cy8jza
      (check the console for the error)



      export class ViewGroup {
      _onViewChanged: any;
      OnViewChanged$ : Observable<any>;
      _onViewAdded: any;
      OnViewAdded$ : Observable<any>;
      _onViewRemoved: any;
      OnViewRemoved$ : Observable<any>;

      viewsSet = new Set<string>();
      currentView = "";
      previousView = "";

      constructor(){
      this.OnViewChanged$ = Observable.create(obs => this._onViewChanged = obs);
      this.OnViewAdded$ = Observable.create(obs => this._onViewAdded = obs);
      this.OnViewRemoved$ = Observable.create(obs => this._onViewRemoved = obs);
      }
      }


      somnwhere in the code I do



      this._availableView.set(name,  new ViewGroup());


      and then call



      this._availableView.get(group)._onViewAdded.next(view);


      but I can't call the next on it, it s say undefined.



      It's exactly the same procedure has



      this.onGroupAdded$ = Observable.create(e => this._onGroupAdded = e)


      but this one work in stackblitz.



      EDIT : I found out that the method I pass inside the create is not called until I subscribe to it. I have to do this to make everything works :



      this.OnViewChanged$ = Observable.create((obs) => {this._onViewAdded = obs});
      this.OnViewAdded$ = Observable.create((obs) => {this._onViewAdded = obs});
      this.OnViewRemoved$ = Observable.create((obs) => {this._onViewAdded = obs});
      this.OnViewChanged$.subscribe();
      this.OnViewAdded$.subscribe();
      this.OnViewRemoved$.subscribe();


      Is there any way to avoid it ?










      share|improve this question
















      I am doing this in code in order to handle multiple views from multiple components



      https://stackblitz.com/edit/angular-cy8jza
      (check the console for the error)



      export class ViewGroup {
      _onViewChanged: any;
      OnViewChanged$ : Observable<any>;
      _onViewAdded: any;
      OnViewAdded$ : Observable<any>;
      _onViewRemoved: any;
      OnViewRemoved$ : Observable<any>;

      viewsSet = new Set<string>();
      currentView = "";
      previousView = "";

      constructor(){
      this.OnViewChanged$ = Observable.create(obs => this._onViewChanged = obs);
      this.OnViewAdded$ = Observable.create(obs => this._onViewAdded = obs);
      this.OnViewRemoved$ = Observable.create(obs => this._onViewRemoved = obs);
      }
      }


      somnwhere in the code I do



      this._availableView.set(name,  new ViewGroup());


      and then call



      this._availableView.get(group)._onViewAdded.next(view);


      but I can't call the next on it, it s say undefined.



      It's exactly the same procedure has



      this.onGroupAdded$ = Observable.create(e => this._onGroupAdded = e)


      but this one work in stackblitz.



      EDIT : I found out that the method I pass inside the create is not called until I subscribe to it. I have to do this to make everything works :



      this.OnViewChanged$ = Observable.create((obs) => {this._onViewAdded = obs});
      this.OnViewAdded$ = Observable.create((obs) => {this._onViewAdded = obs});
      this.OnViewRemoved$ = Observable.create((obs) => {this._onViewAdded = obs});
      this.OnViewChanged$.subscribe();
      this.OnViewAdded$.subscribe();
      this.OnViewRemoved$.subscribe();


      Is there any way to avoid it ?







      angular events rxjs observable






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Nov 20 '18 at 5:09







      Crocsx

















      asked Nov 20 '18 at 5:03









      CrocsxCrocsx

      5141416




      5141416
























          1 Answer
          1






          active

          oldest

          votes


















          2














          If I understand your case correctly, I think what you are looking for is a subject.



          You are correct that observables don't run until they get subscribed to. You can find many references to that in all sorts of docs, for example: angular docs for observables.



          So instead of creating the observables using the create method. Try declaring them as subjects. Check out how they are being used in angular docs here for more details: https://angular.io/guide/component-interaction#parent-and-children-communicate-via-a-service.






          share|improve this answer
























          • I went over this documentation, but I think I interpreted it wrongly, because I reimplemented everything and it work like charm... I closed the other post, cause yo usolve booth problem with this. thank you !

            – Crocsx
            Nov 20 '18 at 5:34













          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',
          autoActivateHeartbeat: false,
          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%2f53386519%2fsubscriber-not-assigned-on-observable-create%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          1 Answer
          1






          active

          oldest

          votes








          1 Answer
          1






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes









          2














          If I understand your case correctly, I think what you are looking for is a subject.



          You are correct that observables don't run until they get subscribed to. You can find many references to that in all sorts of docs, for example: angular docs for observables.



          So instead of creating the observables using the create method. Try declaring them as subjects. Check out how they are being used in angular docs here for more details: https://angular.io/guide/component-interaction#parent-and-children-communicate-via-a-service.






          share|improve this answer
























          • I went over this documentation, but I think I interpreted it wrongly, because I reimplemented everything and it work like charm... I closed the other post, cause yo usolve booth problem with this. thank you !

            – Crocsx
            Nov 20 '18 at 5:34


















          2














          If I understand your case correctly, I think what you are looking for is a subject.



          You are correct that observables don't run until they get subscribed to. You can find many references to that in all sorts of docs, for example: angular docs for observables.



          So instead of creating the observables using the create method. Try declaring them as subjects. Check out how they are being used in angular docs here for more details: https://angular.io/guide/component-interaction#parent-and-children-communicate-via-a-service.






          share|improve this answer
























          • I went over this documentation, but I think I interpreted it wrongly, because I reimplemented everything and it work like charm... I closed the other post, cause yo usolve booth problem with this. thank you !

            – Crocsx
            Nov 20 '18 at 5:34
















          2












          2








          2







          If I understand your case correctly, I think what you are looking for is a subject.



          You are correct that observables don't run until they get subscribed to. You can find many references to that in all sorts of docs, for example: angular docs for observables.



          So instead of creating the observables using the create method. Try declaring them as subjects. Check out how they are being used in angular docs here for more details: https://angular.io/guide/component-interaction#parent-and-children-communicate-via-a-service.






          share|improve this answer













          If I understand your case correctly, I think what you are looking for is a subject.



          You are correct that observables don't run until they get subscribed to. You can find many references to that in all sorts of docs, for example: angular docs for observables.



          So instead of creating the observables using the create method. Try declaring them as subjects. Check out how they are being used in angular docs here for more details: https://angular.io/guide/component-interaction#parent-and-children-communicate-via-a-service.







          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered Nov 20 '18 at 5:28









          lupus137lupus137

          27317




          27317













          • I went over this documentation, but I think I interpreted it wrongly, because I reimplemented everything and it work like charm... I closed the other post, cause yo usolve booth problem with this. thank you !

            – Crocsx
            Nov 20 '18 at 5:34





















          • I went over this documentation, but I think I interpreted it wrongly, because I reimplemented everything and it work like charm... I closed the other post, cause yo usolve booth problem with this. thank you !

            – Crocsx
            Nov 20 '18 at 5:34



















          I went over this documentation, but I think I interpreted it wrongly, because I reimplemented everything and it work like charm... I closed the other post, cause yo usolve booth problem with this. thank you !

          – Crocsx
          Nov 20 '18 at 5:34







          I went over this documentation, but I think I interpreted it wrongly, because I reimplemented everything and it work like charm... I closed the other post, cause yo usolve booth problem with this. thank you !

          – Crocsx
          Nov 20 '18 at 5:34




















          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.




          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53386519%2fsubscriber-not-assigned-on-observable-create%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







          Popular posts from this blog

          'app-layout' is not a known element: how to share Component with different Modules

          android studio warns about leanback feature tag usage required on manifest while using Unity exported app?

          WPF add header to Image with URL pettitions [duplicate]