在Vue JS中访问商店价值

时间:2018-07-04 14:00:40

标签: javascript arrays vue.js vuex

我正在从商店中导入价值

import {store} from '../../store/store'

我有变量:-

let Data = {
  textType: '',
  textData: null
};

当我使用console.log(store.state.testData)

在控制台中获得以下结果:-

{__ob__: Observer}
counters:Array(4)
testCounters:Array(0)
__ob__:Observer {value: {…}, dep: Dep, vmCount: 0}
get counters:ƒ reactiveGetter()
set counters:ƒ reactiveSetter(newVal)
get usageUnitCounters:ƒ reactiveGetter()
set usageUnitCounters:ƒ reactiveSetter(newVal)
__proto__:Object

当我直接访问console.log(store.state.testData.testCounters)

在控制台中获得以下结果:-

[__ob__: Observer]
length:0
__ob__:Observer {value: Array(0), dep: Dep, vmCount: 0}
__proto__:Array

但是如果我使用setTimeout访问console.log(store.state.testData.testCounters),那么我将获得testCounters的必需值。

setTimeout(() => {
  console.log(tore.state.testData.testCounters);    
}, 13000)

但是我需要将 testCounter 值分配给 Data 变量,但是由于数据不可用,因此它传递了定义的空白值。我怎样才能等到 testCounters 数据可用或者我们还有其他方法吗?

export { Data }

3 个答案:

答案 0 :(得分:3)

如果我正确理解了您的问题,则说明您尝试设置store.state.testData.testCounters

您可以执行此操作的方法是使用计算机和手表

  computed: {
    testData() {
      return this.$store.state.testData;
    }
  },
  watch: {
    testData: {
      immediate: true,
      deep: false,
      handler(newValue, oldValue) {
        console.log(newValue);
      }
    }
  },

手表在安装后将触发一次(因为immediate设置为true,但是您可以将其设置为false),当值更改时,它将再次触发。

在旁注中,可以使用散布运算符来显示对象值,而无需像这样的可观察对象:

console.log({...store.state.testData})

答案 1 :(得分:0)

当它返回可见状态时,您应该订阅商店。

df1 <- df[with(df, order(doc_id, terms, -freq)),]
df1[!duplicated(df1[-3]),]
#  doc_id    terms freq
#2      1      bye    1
#1      1 virginia    1
#3      2   energy    2

答案 2 :(得分:0)

这对我有用

computed: {
    audioPlayerStatus() {
      return this.$store.getters.loadedAudioPlayer;
    }
  },

  watch: {
    '$store.state.loadedAudioPlayer.isTrackPlaying': function() {
      ...
    }
  },