cannot read property of undefined angular 7





.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ height:90px;width:728px;box-sizing:border-box;
}







0















I am getting many errors at the dev tools console when adding a service into my component but the code still working but I want to get rid of from these errors



This's the service:



 getPagesData(pageSlug: string): Observable<any> {
return this._http.get<any>(`${environment.apiUrl}wp/v2/pages/?slug=${pageSlug}`);
}


This is the component:



import { Component, OnInit } from '@angular/core';
import { DataService } from 'src/app/services/data.service';

@Component({
selector: 'app-membership',
templateUrl: './membership.page.html',
styleUrls: ['./membership.page.scss'],
})
export class MembershipPage implements OnInit {


public pageContent: any = {};
public content: string;

constructor(
private _data: DataService
) { }

ngOnInit() {
this._data.getPagesData('memberships')
.subscribe(
page => this.pageContent = page[0]
)
}

getContent(): string {
return this.pageContent.content.rendered.replace(/[(.+?)]/g, "");
}

}


What cause the errors is the getContent() method! it says that is the .rendered is an undefined property but it doses defined on the API!



I have searched on that problem and most of the solutions I found it's about using the symbol ? at HTML template but I can't use that in the component itself.










share|improve this question

























  • Can you please create a minimum reproduction on stackblitz ?

    – Sachin Gupta
    Nov 26 '18 at 17:49











  • When you want to change some content or modify it use pipes.See the folowing discussion on stackoverflow stackoverflow.com/questions/42693244/… Official angular guide:angular.io/guide/pipes

    – itwolfpower
    Nov 26 '18 at 17:54













  • You need to share where exactly you are calling getContent() and attempting to use pageContent.

    – Alexander Staroselsky
    Nov 26 '18 at 17:54




















0















I am getting many errors at the dev tools console when adding a service into my component but the code still working but I want to get rid of from these errors



This's the service:



 getPagesData(pageSlug: string): Observable<any> {
return this._http.get<any>(`${environment.apiUrl}wp/v2/pages/?slug=${pageSlug}`);
}


This is the component:



import { Component, OnInit } from '@angular/core';
import { DataService } from 'src/app/services/data.service';

@Component({
selector: 'app-membership',
templateUrl: './membership.page.html',
styleUrls: ['./membership.page.scss'],
})
export class MembershipPage implements OnInit {


public pageContent: any = {};
public content: string;

constructor(
private _data: DataService
) { }

ngOnInit() {
this._data.getPagesData('memberships')
.subscribe(
page => this.pageContent = page[0]
)
}

getContent(): string {
return this.pageContent.content.rendered.replace(/[(.+?)]/g, "");
}

}


What cause the errors is the getContent() method! it says that is the .rendered is an undefined property but it doses defined on the API!



I have searched on that problem and most of the solutions I found it's about using the symbol ? at HTML template but I can't use that in the component itself.










share|improve this question

























  • Can you please create a minimum reproduction on stackblitz ?

    – Sachin Gupta
    Nov 26 '18 at 17:49











  • When you want to change some content or modify it use pipes.See the folowing discussion on stackoverflow stackoverflow.com/questions/42693244/… Official angular guide:angular.io/guide/pipes

    – itwolfpower
    Nov 26 '18 at 17:54













  • You need to share where exactly you are calling getContent() and attempting to use pageContent.

    – Alexander Staroselsky
    Nov 26 '18 at 17:54
















0












0








0








I am getting many errors at the dev tools console when adding a service into my component but the code still working but I want to get rid of from these errors



This's the service:



 getPagesData(pageSlug: string): Observable<any> {
return this._http.get<any>(`${environment.apiUrl}wp/v2/pages/?slug=${pageSlug}`);
}


This is the component:



import { Component, OnInit } from '@angular/core';
import { DataService } from 'src/app/services/data.service';

@Component({
selector: 'app-membership',
templateUrl: './membership.page.html',
styleUrls: ['./membership.page.scss'],
})
export class MembershipPage implements OnInit {


public pageContent: any = {};
public content: string;

constructor(
private _data: DataService
) { }

ngOnInit() {
this._data.getPagesData('memberships')
.subscribe(
page => this.pageContent = page[0]
)
}

getContent(): string {
return this.pageContent.content.rendered.replace(/[(.+?)]/g, "");
}

}


What cause the errors is the getContent() method! it says that is the .rendered is an undefined property but it doses defined on the API!



I have searched on that problem and most of the solutions I found it's about using the symbol ? at HTML template but I can't use that in the component itself.










share|improve this question
















I am getting many errors at the dev tools console when adding a service into my component but the code still working but I want to get rid of from these errors



This's the service:



 getPagesData(pageSlug: string): Observable<any> {
return this._http.get<any>(`${environment.apiUrl}wp/v2/pages/?slug=${pageSlug}`);
}


This is the component:



import { Component, OnInit } from '@angular/core';
import { DataService } from 'src/app/services/data.service';

@Component({
selector: 'app-membership',
templateUrl: './membership.page.html',
styleUrls: ['./membership.page.scss'],
})
export class MembershipPage implements OnInit {


public pageContent: any = {};
public content: string;

constructor(
private _data: DataService
) { }

ngOnInit() {
this._data.getPagesData('memberships')
.subscribe(
page => this.pageContent = page[0]
)
}

getContent(): string {
return this.pageContent.content.rendered.replace(/[(.+?)]/g, "");
}

}


What cause the errors is the getContent() method! it says that is the .rendered is an undefined property but it doses defined on the API!



I have searched on that problem and most of the solutions I found it's about using the symbol ? at HTML template but I can't use that in the component itself.







javascript angular ionic-framework angular7






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 28 '18 at 9:53









Goncalo Peres

1,4771720




1,4771720










asked Nov 26 '18 at 17:47









hesham shawkyhesham shawky

848




848













  • Can you please create a minimum reproduction on stackblitz ?

    – Sachin Gupta
    Nov 26 '18 at 17:49











  • When you want to change some content or modify it use pipes.See the folowing discussion on stackoverflow stackoverflow.com/questions/42693244/… Official angular guide:angular.io/guide/pipes

    – itwolfpower
    Nov 26 '18 at 17:54













  • You need to share where exactly you are calling getContent() and attempting to use pageContent.

    – Alexander Staroselsky
    Nov 26 '18 at 17:54





















  • Can you please create a minimum reproduction on stackblitz ?

    – Sachin Gupta
    Nov 26 '18 at 17:49











  • When you want to change some content or modify it use pipes.See the folowing discussion on stackoverflow stackoverflow.com/questions/42693244/… Official angular guide:angular.io/guide/pipes

    – itwolfpower
    Nov 26 '18 at 17:54













  • You need to share where exactly you are calling getContent() and attempting to use pageContent.

    – Alexander Staroselsky
    Nov 26 '18 at 17:54



















Can you please create a minimum reproduction on stackblitz ?

– Sachin Gupta
Nov 26 '18 at 17:49





Can you please create a minimum reproduction on stackblitz ?

– Sachin Gupta
Nov 26 '18 at 17:49













When you want to change some content or modify it use pipes.See the folowing discussion on stackoverflow stackoverflow.com/questions/42693244/… Official angular guide:angular.io/guide/pipes

– itwolfpower
Nov 26 '18 at 17:54







When you want to change some content or modify it use pipes.See the folowing discussion on stackoverflow stackoverflow.com/questions/42693244/… Official angular guide:angular.io/guide/pipes

– itwolfpower
Nov 26 '18 at 17:54















You need to share where exactly you are calling getContent() and attempting to use pageContent.

– Alexander Staroselsky
Nov 26 '18 at 17:54







You need to share where exactly you are calling getContent() and attempting to use pageContent.

– Alexander Staroselsky
Nov 26 '18 at 17:54














2 Answers
2






active

oldest

votes


















2














Yes, you cannot use ? Elvis (Safe navigation) operator in the component itself because it is designed for view part only.



But you can add some check in the component too to avoid such errors like -



getContent(): string {
const dataToReturn = this.pageContent && this.pageContent.content && this.pageContent.content.rendered.replace(/[(.+?)]/g, "");
return dataToReturn
}



.rendered is an undefined property




Also, This error may produce you have defined pageContent = {} so on {} neither content nor rendered exist , may be that is also the reason to exist such errors.



Angular recommend to strongly typecast your data before use.






share|improve this answer

































    1














    If you are calling getContent() in the HTML/template, you can most likely avoid this error by either:



    Making pageContent initially null and using *ngIf to only display the content once it has asynchronously resolved:



    Component:



    public pageContent: any = null;


    Template:



    <div *ngIf="pageContent">{{getContent()}}</div>


    Or you could instead RxJS operators such as map() and the async pipe:



    Component:



    import { Component, OnInit } from '@angular/core';
    import { DataService } from 'src/app/services/data.service';
    import { Observable } from 'rxjs';
    import { map } from 'rxjs/operators';

    @Component({
    selector: 'app-membership',
    templateUrl: './membership.page.html',
    styleUrls: ['./membership.page.scss'],
    })
    export class MembershipPage implements OnInit {
    public pageContent: Observable<string>;
    public content: string;

    constructor(private _data: DataService) { }

    ngOnInit() {
    this.pageContent = this._data.getPagesData('memberships')
    .pipe(
    map(page => page[0].content.rendered.replace(/[(.+?)]/g, ""))
    );
    }
    }


    Template:



    <div>{{pageContent | async}}</div>


    That being said, you should probably have additional checks to ensure each sub-property is available prior to accessing it, but usually this type of error is because you are attempting to access the contents before they have resolved.



    Hopefully that helps!






    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',
      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%2f53486476%2fcannot-read-property-of-undefined-angular-7%23new-answer', 'question_page');
      }
      );

      Post as a guest















      Required, but never shown

























      2 Answers
      2






      active

      oldest

      votes








      2 Answers
      2






      active

      oldest

      votes









      active

      oldest

      votes






      active

      oldest

      votes









      2














      Yes, you cannot use ? Elvis (Safe navigation) operator in the component itself because it is designed for view part only.



      But you can add some check in the component too to avoid such errors like -



      getContent(): string {
      const dataToReturn = this.pageContent && this.pageContent.content && this.pageContent.content.rendered.replace(/[(.+?)]/g, "");
      return dataToReturn
      }



      .rendered is an undefined property




      Also, This error may produce you have defined pageContent = {} so on {} neither content nor rendered exist , may be that is also the reason to exist such errors.



      Angular recommend to strongly typecast your data before use.






      share|improve this answer






























        2














        Yes, you cannot use ? Elvis (Safe navigation) operator in the component itself because it is designed for view part only.



        But you can add some check in the component too to avoid such errors like -



        getContent(): string {
        const dataToReturn = this.pageContent && this.pageContent.content && this.pageContent.content.rendered.replace(/[(.+?)]/g, "");
        return dataToReturn
        }



        .rendered is an undefined property




        Also, This error may produce you have defined pageContent = {} so on {} neither content nor rendered exist , may be that is also the reason to exist such errors.



        Angular recommend to strongly typecast your data before use.






        share|improve this answer




























          2












          2








          2







          Yes, you cannot use ? Elvis (Safe navigation) operator in the component itself because it is designed for view part only.



          But you can add some check in the component too to avoid such errors like -



          getContent(): string {
          const dataToReturn = this.pageContent && this.pageContent.content && this.pageContent.content.rendered.replace(/[(.+?)]/g, "");
          return dataToReturn
          }



          .rendered is an undefined property




          Also, This error may produce you have defined pageContent = {} so on {} neither content nor rendered exist , may be that is also the reason to exist such errors.



          Angular recommend to strongly typecast your data before use.






          share|improve this answer















          Yes, you cannot use ? Elvis (Safe navigation) operator in the component itself because it is designed for view part only.



          But you can add some check in the component too to avoid such errors like -



          getContent(): string {
          const dataToReturn = this.pageContent && this.pageContent.content && this.pageContent.content.rendered.replace(/[(.+?)]/g, "");
          return dataToReturn
          }



          .rendered is an undefined property




          Also, This error may produce you have defined pageContent = {} so on {} neither content nor rendered exist , may be that is also the reason to exist such errors.



          Angular recommend to strongly typecast your data before use.







          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited Nov 26 '18 at 17:57

























          answered Nov 26 '18 at 17:54









          Pardeep JainPardeep Jain

          42.5k17104147




          42.5k17104147

























              1














              If you are calling getContent() in the HTML/template, you can most likely avoid this error by either:



              Making pageContent initially null and using *ngIf to only display the content once it has asynchronously resolved:



              Component:



              public pageContent: any = null;


              Template:



              <div *ngIf="pageContent">{{getContent()}}</div>


              Or you could instead RxJS operators such as map() and the async pipe:



              Component:



              import { Component, OnInit } from '@angular/core';
              import { DataService } from 'src/app/services/data.service';
              import { Observable } from 'rxjs';
              import { map } from 'rxjs/operators';

              @Component({
              selector: 'app-membership',
              templateUrl: './membership.page.html',
              styleUrls: ['./membership.page.scss'],
              })
              export class MembershipPage implements OnInit {
              public pageContent: Observable<string>;
              public content: string;

              constructor(private _data: DataService) { }

              ngOnInit() {
              this.pageContent = this._data.getPagesData('memberships')
              .pipe(
              map(page => page[0].content.rendered.replace(/[(.+?)]/g, ""))
              );
              }
              }


              Template:



              <div>{{pageContent | async}}</div>


              That being said, you should probably have additional checks to ensure each sub-property is available prior to accessing it, but usually this type of error is because you are attempting to access the contents before they have resolved.



              Hopefully that helps!






              share|improve this answer




























                1














                If you are calling getContent() in the HTML/template, you can most likely avoid this error by either:



                Making pageContent initially null and using *ngIf to only display the content once it has asynchronously resolved:



                Component:



                public pageContent: any = null;


                Template:



                <div *ngIf="pageContent">{{getContent()}}</div>


                Or you could instead RxJS operators such as map() and the async pipe:



                Component:



                import { Component, OnInit } from '@angular/core';
                import { DataService } from 'src/app/services/data.service';
                import { Observable } from 'rxjs';
                import { map } from 'rxjs/operators';

                @Component({
                selector: 'app-membership',
                templateUrl: './membership.page.html',
                styleUrls: ['./membership.page.scss'],
                })
                export class MembershipPage implements OnInit {
                public pageContent: Observable<string>;
                public content: string;

                constructor(private _data: DataService) { }

                ngOnInit() {
                this.pageContent = this._data.getPagesData('memberships')
                .pipe(
                map(page => page[0].content.rendered.replace(/[(.+?)]/g, ""))
                );
                }
                }


                Template:



                <div>{{pageContent | async}}</div>


                That being said, you should probably have additional checks to ensure each sub-property is available prior to accessing it, but usually this type of error is because you are attempting to access the contents before they have resolved.



                Hopefully that helps!






                share|improve this answer


























                  1












                  1








                  1







                  If you are calling getContent() in the HTML/template, you can most likely avoid this error by either:



                  Making pageContent initially null and using *ngIf to only display the content once it has asynchronously resolved:



                  Component:



                  public pageContent: any = null;


                  Template:



                  <div *ngIf="pageContent">{{getContent()}}</div>


                  Or you could instead RxJS operators such as map() and the async pipe:



                  Component:



                  import { Component, OnInit } from '@angular/core';
                  import { DataService } from 'src/app/services/data.service';
                  import { Observable } from 'rxjs';
                  import { map } from 'rxjs/operators';

                  @Component({
                  selector: 'app-membership',
                  templateUrl: './membership.page.html',
                  styleUrls: ['./membership.page.scss'],
                  })
                  export class MembershipPage implements OnInit {
                  public pageContent: Observable<string>;
                  public content: string;

                  constructor(private _data: DataService) { }

                  ngOnInit() {
                  this.pageContent = this._data.getPagesData('memberships')
                  .pipe(
                  map(page => page[0].content.rendered.replace(/[(.+?)]/g, ""))
                  );
                  }
                  }


                  Template:



                  <div>{{pageContent | async}}</div>


                  That being said, you should probably have additional checks to ensure each sub-property is available prior to accessing it, but usually this type of error is because you are attempting to access the contents before they have resolved.



                  Hopefully that helps!






                  share|improve this answer













                  If you are calling getContent() in the HTML/template, you can most likely avoid this error by either:



                  Making pageContent initially null and using *ngIf to only display the content once it has asynchronously resolved:



                  Component:



                  public pageContent: any = null;


                  Template:



                  <div *ngIf="pageContent">{{getContent()}}</div>


                  Or you could instead RxJS operators such as map() and the async pipe:



                  Component:



                  import { Component, OnInit } from '@angular/core';
                  import { DataService } from 'src/app/services/data.service';
                  import { Observable } from 'rxjs';
                  import { map } from 'rxjs/operators';

                  @Component({
                  selector: 'app-membership',
                  templateUrl: './membership.page.html',
                  styleUrls: ['./membership.page.scss'],
                  })
                  export class MembershipPage implements OnInit {
                  public pageContent: Observable<string>;
                  public content: string;

                  constructor(private _data: DataService) { }

                  ngOnInit() {
                  this.pageContent = this._data.getPagesData('memberships')
                  .pipe(
                  map(page => page[0].content.rendered.replace(/[(.+?)]/g, ""))
                  );
                  }
                  }


                  Template:



                  <div>{{pageContent | async}}</div>


                  That being said, you should probably have additional checks to ensure each sub-property is available prior to accessing it, but usually this type of error is because you are attempting to access the contents before they have resolved.



                  Hopefully that helps!







                  share|improve this answer












                  share|improve this answer



                  share|improve this answer










                  answered Nov 26 '18 at 18:01









                  Alexander StaroselskyAlexander Staroselsky

                  13.9k42343




                  13.9k42343






























                      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%2f53486476%2fcannot-read-property-of-undefined-angular-7%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

                      Wiesbaden

                      Marschland

                      Dieringhausen