Vue-Select:将二维数组推送到:选项

Vue-Select: Pushing a 2 dimensional array to :options

插件Vue-Select.

我想做的是,根据数据库进行搜索-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 的新手,所以任何帮助都会很好。谢谢!

Vue 的计算属性通常不用于填充 Vue 数据属性,它们通常采用一个或多个数据属性并将它们组合成不同的东西以供模板使用。

在您的代码中,您尝试在计算的 属性 'get_lokasi' 中填充 vue 数据属性 'lokasi_list',但您从未在模板中的任何地方调用 'get_lokasi'所以 lokasi_list 仍然是空的。

另一种解决这种情况的方法是使用 vue 方法通过使用类似 axios 的 ajax 调用从 php 后端获取数据,您通常会使用该方法在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 注入攻击,抱歉如果我指出你已经知道的事情.

没关系..

我的错误,我没有注意到我的 receive_lokasi.php 代码

而不是使用MYSQLI_NUM

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

我应该使用 MYSQLI_ASSOC、,如 here.

中所述
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>

之后,一切正常。