Vue-Select: перемещение 2-мерного массива в: параметры

Плагин Vue-Select.

То, что я пытался сделать, это сделать поиск-выбор-выпадающий ввод на основе базы данных.

Итак, вот мой SQL- файл с именем Ms_Location.

id_Loc | name_Loc
LOC0001 | Indonesia
LOC0002 | China
LOC0003 | America

Мой index.php

<!DOCTYPE html>
<html>
<head>
  
</head

<body>
  <div class="form-group">
    <label for="lokasi_id" class="control-label required"><strong>Lokasi</strong></label>
    <v-select :options="lokasi_list" placeholder='Type location..'></v-select>
  </div>
  
  <script type="text/javascript" src="js/vue.js"></script>
  <script src="https://unpkg.com/vue-select@latest"></script>

  Vue.component('v-select', VueSelect.VueSelect);
  
  var app = new Vue ({
            el: '#app',
            data: {
                lokasi_select: '',
                lokasi_list: [],
            },
            // End of data

            computed: {
                get_lokasi() {
                    var list_loc = new Array();
                    list_loc = <?php include('receive_lokasi.php') ?>;
                        for(var i=0; i<list_loc.length; i++) {
                            var pushLoc = {
                                label: list_loc[i][1], value: list_loc[i][0]
                            }
                            this.lokasi_list.push(pushLoc);
                        }
                    return list_loc[0][1];
                }
            }

        })
    });
</script>
</body>
</html>

И это мой receive_lokasi.php

    <?php
    include ('koneksi.php');

    $condition = "1";
    if(isset($_GET['userid'])){
        $condition = " id=".$_GET['userid'];
    }

    $sqltran = mysqli_query($con, "SELECT id_Loc, name_Loc FROM ms_location")or die(mysqli_error($con));
    $response = array();

    while ($rowList = mysqli_fetch_array($sqltran,MYSQLI_NUM)) {                         

        $response[] = $rowList;
    }

    echo json_encode($response);
    mysqli_close($con);
?>

Тем не менее, я не могу показать вариант. Это происходит только после того, как я сделаю get_lokasi(). Значит ошибка, наверное, есть? Или, может быть, я что-то упустил.

Я пытался где-то напечатать lokasi_list, и да, значение есть, но не отображается в выпадающем меню.

Кроме того, я новичок в Vue, поэтому любая помощь будет хорошей. Спасибо!

2 ответа

Решение

Не берите в голову..

Моя ошибка, я не заметил receive_lokasi.php код

Вместо использования MYSQLI_NUM

while ($rowList = mysqli_fetch_array($sqltran,MYSQLI_NUM)) {                         
$response[] = $rowList;
}

Я должен использовать MYSQLI_ASSOC, как описано здесь.

while ($rowList = mysqli_fetch_array($sqltran,**MYSQLI_ASSOC**)) {                         
$response[] = $rowList;
}

После этого измени это

<v-select :options="lokasi_list" placeholder='Type location..'></v-select>

К этому

<v-select label='nama_Location' :options="lokasi_list" placeholder='Type location..'></v-select>

После этого все загружается нормально.

Вычисляемые свойства Vue обычно не используются для заполнения атрибутов данных VUE, они обычно принимают один или несколько атрибутов данных и объединяют их в нечто иное для использования шаблоном.

В своем коде вы пытались заполнить атрибут данных vue "lokasi_list" в вычисляемом свойстве "get_lokasi", но вы никогда не вызываете "get_lokasi" где-либо в шаблоне, поэтому lokasi_list остается пустым.

Другой подход к такого рода ситуации заключается в использовании метода vue для извлечения данных из бэкэнда php с помощью вызова ajax с чем-то вроде axios, и вы обычно используете этот метод в событии жизненного цикла приложения vue, чтобы получить данные как можно скорее.,

например

<script>
    Vue.component('v-select', VueSelect.VueSelect);

    var app = new Vue({
      el: '#app',
      data: {
        lokasi_select: '',
        lokasi_list: [],
      },
      created: function() {
        this.fetchLocations();
      },
      methods: {
        fetchLocations: function() {
          axios.get('/api/locations-end-point')
            .then((response) => {
              this.lokasi_list = response.data //might need to change this to match how your php is returning the json
            })
            .catch((error) => {
              //handle the error
            })
          }
        }
    });
</script>

Извините, что упомянул об этом, но в вашем php вы получили:

if(isset($_GET['userid'])){
    $condition = " id=".$_GET['userid'];
}

Похоже, вы планировали использовать его как часть вашего sql, но он был бы уязвим для атак SQL-инъекций, извините, если я укажу на то, что вы уже знали.

Другие вопросы по тегам