Как мне выполнить итерацию через JSON в VueJS?

#mysql #laravel #vue.js #axios

#mysql #laravel #vue.js #axios

Вопрос:

Я сохраняю некоторые настройки в базе данных с ключами и данными JSON, но когда я получаю эти настройки из Laravel API, он возвращает массив, который становится напряженной работой по переназначению данных в поля ввода. Я хочу знать, есть ли более простой способ сделать это.

До сих пор я пытался выполнять итерации и использовать оператор switch для идентификации ключей и их переназначения. Но проблема в том, что я не могу получить доступ к переменной данных VueJS в цикле.

Вот посмотрите на таблицу базы данных: Таблица базы данных

Вот объекты, которые я использую в Vue:

     helpful_notification: {
        email: false,
        sms: false,
        push: false,
    },
    updates_newsletter: {

          email: false,
          sms: false,
          push: false,

    },
  

Вот мой код для выполнения итерации по результатам:

    axios.get('/api/notificationsettings')
      .then(response => {
          var data = response.data;
          let list = [];
          console.log(data)
          $.each(data, function(i, j){
            switch(j.key){
              case 'transactional': 

                  var settings = JSON.parse(j.settings)
                  var x = {
                  transactional : settings
                }
                list.push(x)
              break;
              case 'task_reminder': 
                 var settings = JSON.parse(j.settings)
                  x = {
                  task_reminder : settings
                }
                list.push(x)
                break; 
            }
          });
          this.transactional = list;
          // this.task_reminder= list.task_reminder;
          console.log(list);
      })
      .catch(error => {

      });
  

Ответ №1:

В JavaScript функции имеют свою собственную область действия, за исключением нескольких исключений. Это означает, что внутри вашей анонимной функции (т. е:

  $.each(data, function(i, j){
   // this here is the function scope, not the outside scope
 })
  

…), this не является внешней областью, это область функции

Есть два способа сделать внешнюю область доступной внутри вашей функции:

а) поместите его в переменную

  const _this = this;
 $.each(data, function(i, j){
   // this is function scope, 
   // _this is outside scope (i.e: _this.list.task_reminder)
 })
  

б) используйте функцию со стрелкой

 $.each(data, (i, j) => {
   // this is the outside scope
   // the arrow function doesn't have a scope. 
})
  

Вышесказанное является упрощением, направленным на то, чтобы помочь вам получить доступ к внешней области внутри вашей функции. Но this может отличаться в зависимости от контекста, в котором он используется. Вы можете прочитать больше о this здесь.