Drilled-prog
@Drilled-prog
Программирую на ['php', 'js']

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

Есть SFC компонет:
<template>
  <div class="spoiler" :class="open && 'spoiler--open'">
    <div class="spoiler__header" @click="toggle">
      <slot name="header">{header_default}</slot>
    </div>
    <div class="spoiler__body" x-show="open">
      <slot>{body_default}</slot>
    </div>
  </div>
</template>


Так же в нём есть секция script:
<script>
  return {
    init() {
      console.log('init')
    },
    open: true,
    toggle() {
      this.open = !this.open
    },
    destroy() {
      console.log('DESTROY')
    }
  }
</script>


для компонента получаю данные через new Function(jsString).

Можно немножко подшаманить и привязать контекст к секции скрипт, получится что то типа:
<script>
  console.log('init')

  this.open = false

  toggle = () => {
    this.open = !this.open
  }

  destroy = () => {
    console.log('DESTROY')
  }
</script>


как бы уже кода меньше, но хз очевидно ли это...

Хотелось бы что бы было более очевидно, типа так:
<script>
  console.log('init')

  let open = false

  function toggle(){
    open = !open
  }

  function destroy(){
    console.log('DESTROY')
  }
</script>


Как это можно сделать ? И вообще стоит ли, или в самом первом варианте через return норм?
  • Вопрос задан
  • 83 просмотра
Пригласить эксперта
Ответы на вопрос 2
@historydev Куратор тега JavaScript
Острая аллергия на анимешников
function toggle() {
	this.open = !this.open;
}

const obj = {
	open: false
}

toggle.apply(obj);
Ответ написан
sergiks
@sergiks Куратор тега JavaScript
♬♬
Если речь про компонент VueJS, то похоже, упустили data, где хранятся собственные данные инстанса компонента.

Что-то типа:
<script>
export default {
  data() {
    return {
      isOpen: false,
    }
  }

  methods: {
    toggle: () => this.isOpen = !this.isOpen,
  }
}
</script>
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы