Vue.js。数据属性未定义

Posted

技术标签:

【中文标题】Vue.js。数据属性未定义【英文标题】:Vue.js. Data property undefined 【发布时间】:2018-09-10 07:54:09 【问题描述】:

我正在尝试访问我的 Vue.js 组件中的数据属性。看起来我遗漏了一些明显的东西。

这是我的代码的简短版本。 StoreFilter.vue 是 matfish2/vue-tables-2 的包装器。

<template>
    <store-filter :selected.sync="storeIds"></store-filter>
</template>

<script>
    import StoreFilter from './Filters/StoreFilter';

    export default 
        components: 
            StoreFilter
        ,
        data() 
            return 
                options : 
                    requestFunction(data) 

                        console.log(this.storeIds); //undefined

                        return axios.get('/api/orders', 
                            params: data
                        ).catch(function (e) 
                            this.dispatch('error', e);
                        .bind(this));
                    ,
                ,
                storeIds: [],
            
        ,
        watch     : 
            storeIds(storeIds) 
                this.refreshTable();
            
        ,
        methods   : 
            refreshTable() 
                this.$refs.table.refresh();
            
        
    
</script>

如何从requestFunction获取storeIds

【问题讨论】:

也许你应该把它放在methods 中?如果出于某种原因您决定需要将其放入 data 中,请改用粗箭头函数,即 requestFunction: (data) =&gt; @A. Lau 我不能使用methods,因为它是predefined function,但您的解决方案有所帮助。请把它写成答案,这样我就可以接受了。 【参考方案1】:

使用闭包,参见下面的重写。

data() 
  let dataHolder = ;
  dataHolder.storeIds = [];

  dataHolder.options = 
    requestFunction(data) 

        // closure
        console.log(dataHolder.storeIds); // not undefined

        return axios.get('/api/orders', 
            params: data
        ).catch(function (e) 
            this.dispatch('error', e);
        .bind(this));
    
  

  return dataHolder;

【讨论】:

【参考方案2】:

我建议使用created() 的方式来处理这个问题。

export default 
  // whatever you got here
  data () 
    return 
      options: 
    
  ,
  created () 
    axios.get('/api/orders',  some: params ).then(response => this.options = response.data)
  

【讨论】:

最好初始化options: null,这样你就可以使用v-if来检查了。 我也可以使用Object.keys(options).length &gt; 0 来检查。我的意思是它真的是或者这里是出于个人喜好。当然,我很乐意了解nullObject.keys() 方法是否更清洁更好。 感谢您的回答,但我无法使用方法,因为它是predefined function。 我这里没有使用方法。我正在使用created ()方式 @RuChernChong 再次。我不能把这个函数放在任何地方,但是options。而@A.Lau 已经解决了这个问题。

以上是关于Vue.js。数据属性未定义的主要内容,如果未能解决你的问题,请参考以下文章

Vue.js 无法读取未定义的属性(读取“路由器”)错误

如何解决“未捕获的类型错误:无法读取未定义的属性'get'”? (Vue.JS 2)

在 vue.js 中查找数组长度时无法读取未定义的属性“长度”

Vue.js:实例上未定义属性或方法

Vue.js - 无法读取未定义的属性“推送”[重复]

无法在 vue.js 中读取“未定义”的属性