Home  >  Q&A  >  body text

"Undefined 'blogItems' error" while trying to push updates to Vue data variables

I'm trying to get all the posts from Firebase and add them to an array, but I'm getting the following error:

Uncaught (in promise) TypeError: Cannot read property 'blogItems' of undefined

The following is the script:

export default {
    data(){
      return{
        blogItems: []
      }
    },
    mounted(){
      this.getPosts();
    },
    methods:{

      getPosts(){

        database.collection('blog').doc('yP6aYXvisFbTsqtQ3MEfuyz6xYE3').collection('posts').get().then(snapshot =>{

          const posts = snapshot.docs.map(doc => doc.data())
          posts.forEach(function(post){
            this.blogItems.push(post.content)
          })
        })
        
      },

    }

  }

P粉262073176P粉262073176422 days ago524

reply all(1)I'll reply

  • P粉835428659

    P粉8354286592023-09-16 00:09:32

    In your case, change this in this.blogItems to posts.

    You have two solutions

    1. Store this into a variable and use it

      getPosts(){
        let tis = this;
      
       database.collection('blog').doc('yP6aYXvisFbTsqtQ3MEfuyz6xYE3').collection('posts').get().then(snapshot =>{
      
         const posts = snapshot.docs.map(doc => doc.data())
         posts.forEach(function(post){
           tis.blogItems.push(post.content)
         })
       })
      
       },

    1. Use arrow functions

      getPosts(){
      
       database.collection('blog').doc('yP6aYXvisFbTsqtQ3MEfuyz6xYE3').collection('posts').get().then(snapshot =>{
      
         const posts = snapshot.docs.map(doc => doc.data())
         posts.forEach((post) => {
           this.blogItems.push(post.content)
         })
       })
      
       },

    reply
    0
  • Cancelreply