VueJS: почему я не могу позвонить <variable>откуда угодно? - PullRequest
0 голосов
/ 11 марта 2020

хорошо. полное переоснащение, так как люди увязли в вещах, не связанных с этим вопросом. так что я свел его к самому маленькому существу:

<script src='_js/vue.2.6.11.js'></script>

<div id="app">
  <h1>{{ email }}</h1>
  <h1>{{ email[reportID] }}</h1>
  <hr>
  <button @click='makeItGo'>CLICK</button>
</div>

<script>

var vm = new Vue ({
  el: '#app',
  data: {
    email: [],
    reportID: 40,
    info: 'this is info',
  },

  methods: {
    makeItGo() {
      vm.email.push(vm.reportID);
      vm.email[reportID] = info;    <-- this doesn't work.  WHY?
      vm.email[reportID].push(info);   <-- this doesn't work either.  WHY?
    }
  },
});

</script>

, это вызовет следующие ошибки:

[Vue warn]: Error in v-on handler: "ReferenceError: reportID is not defined"

(found in <Root>)

ReferenceError: "reportID is not defined"
    makeItGo http://localhost/project/test.php line 669 > scriptElement:27
    invokeWithErrorHandling http://localhost/project/_js/vue.2.6.11.js line 669 > scriptElement:1863
    invoker http://localhost/project/_js/vue.2.6.11.js line 669 > scriptElement:2188
    _wrapper http://localhost/project/_js/vue.2.6.11.js line 669 > scriptElement:7547

вот разочарование: ПОЧЕМУ говорится, что 'reportID' неопределенный, когда это так очевидно. и ПОЧЕМУ вызов этого напрямую (vm.email против электронной почты) не обходит никакие проблемы с областями видимости, как я и ожидал (что является проблемой)? в PHP этого просто не происходит, поэтому я запутался.

Все, что я пытаюсь сделать, это динамически создать вложенный массив. оттуда короткий прыжок, чтобы сделать его ассоциативным ... я надеюсь.

email
  └ 40
    └ 'this is info'

1 Ответ

0 голосов
/ 11 марта 2020

Поднимите this в верхней части вашего метода

let that = this;

и затем используйте that во всем методе вместо this. Таким образом вы сохраняете область действия в каждом методе.

...