代码之家  ›  专栏  ›  技术社区  ›  Alexander Kim

在创建的函数-Vue2中访问axios响应数据

  •  0
  • Alexander Kim  · 技术社区  · 6 年前

    categories mounted () :

    data () {
      return {
        categories: {}
      }
    }
    
    created () {
      this.fetchCategories()
      this.showArticles(this.categories[0].id)
    }
    
    methods: {
      fetchCategories () {
        return axios.get(globalConfig.FAQCATS_URL)
          .then((resp) => {
            this.categories = resp.data
          })
          .catch((err) => {
            console.log(err)
          })
        }
    }
    

    Cannot read property 'id' of undefined . 我猜axios的承诺是异步的,这就是为什么我不能在内部使用它的响应 created mounted . 如何正确访问它的响应?

    我的操作的目的是在页面加载时设置默认类别,这样页面就不会为空,因为如果没有选择类别,我不会显示任何项目。

    showArticles

    showArticles (id) {
      return axios.get(globalConfig.FAQCATS_URL + '/' + id + '/articles')
        .then((resp) => {
          this.articles = resp.data
          // console.log(resp)
        })
        .catch((err) => {
          console.log(err)
        })
    }
    
    2 回复  |  直到 6 年前
        1
  •  1
  •   t.niese    6 年前

    fetchCategories 使用解析 .then

    this.fetchCategories()
        .then(() => this.showArticles(this.categories[0].id))
    

    或者如果你能用 await async :

    async created () {
      await this.fetchCategories()
      this.showArticles(this.categories[0].id)
    }
    

    但你可能想用 watch :

    data () {
      return {
        categories: null
      }
    }
    
    watch: {
      categories( newList, oldList ) {
         if( !oldList ) {
            // only call showArticles if categories was not et before
            this.showArticles(this.categories[0].id)
         }
      }
    } 
    
    created () {
      this.fetchCategories()
    }
    
        2
  •  0
  •   Hozhabr    6 年前

    Create mounted 相反 create Created methods 然后将响应存储在store函数中,因为您无法访问 data variable 安装前。

    data () {
      return {
        categories: {}
      }
    }
    
    mounted() {
      this.fetchCategories()
    }
    
    methods: {
      fetchCategories () {
        return axios.get(globalConfig.FAQCATS_URL)
          .then((resp) => {
            this.categories = resp.data;
            this.showArticles(this.categories[0].id)
          })
          .catch((err) => {
            console.log(err)
          })
        }
        }