Как получить доступ к вычисляемой переменной состояния?

#vue.js #vue-component #vue-class-components #vue-property-decorator

#vue.js #vue-компонент #vue-class-components #vue-свойство-декоратор

Вопрос:

Используя компонент класса Vue, как получить значение вычисляемой переменной? Попытка использовать this.bar выдает ошибку: Property 'bar' does not exist on type 'Vue'.

 <script lang="ts">
import { Vue, Component } from "vue-property-decorator";

@Component({
    computed: {
        bar() {
            return true;
        },
    },
    methods: {
        qux() {
            // How to get the value of bar here?
            if (this.bar) {
                baz();
            }
        },
    },
})
export default class Foo extends Vue {}
</script>
  

Ответ №1:

Это потому, что вы не используете правильный синтаксис.

Вы должны изменить то, что у вас есть для этого

 <script lang="ts">
import { Vue, Component } from "vue-property-decorator";

@Component  
export default class Foo extends Vue {
  get bar(): boolean {
    return true;
  }
  qux() {
    if (this.bar) {
        baz();
    }
  }
}
</script>  

Подробнее об использовании компонентов класса Vue читайте в этой статье

Ответ №2:

Есть ли причина, по которой вы не хотите использовать getter?

 @Component({})
export default class Foo extends Vue {
  get bar() { return true }
}
  

Это преобразуется в вычисляемое свойство

Ответ №3:

Если вы используете vue-property-decorator, все переходит в расширенный класс.

Обычный Vue:

 export default {
  data(){
    return {}
  },
  computed: {
    bar() {
        return true;
    },
  },
  methods: {
    qux() {
        if (this.bar) {
            baz();
        }
    }
  }
}
  

То же самое в Typescript

 @Component({})

export default class Foo extends Vue {
  get bar() {
    return true;
  }

  private qux() {
    if (this.bar) {
      this.baz();
    }
  }

  private baz() {
    //do smth
  }
}