[英]Dynamically display fetched data in input field using Laravel 8 Vue Js
我在 Laravel 8 中有一个使用 Vue js 的简单注册表单,在提交之前,我需要首先检查引用注册人的用户是否存在于我的数据库中。 如果记录存在,我需要在@change 事件的输入字段中动态显示用户的全名。
这是我的 Vue 组件:
<template>
<div>
<h2>TESTING</h2>
<form @submit.prevent="submit" >
<input type="text" class="form-control" v-model="form.ucode" @change="getUser()">
<input type="text" class="form-control" v-model="form.uname">
</form>
</div>
</template>
<script>
export default {
data: function(){
return{
form: {
ucode: "",
uname: "",
},
}
},
methods:{
getUser(){
axios.get('api/checkUser?ucode=' + this.form.ucode).then(res=>{
this.form.uname = res.data.first_name
})
}
}
}
这是我的 ResellerController 和 API 路由:
Route::get('/checkUser', [ResellerController::class, 'show']);
public function show()
{
$ucode = request('ucode');
$user = DB::table('resellers')->where('username', $ucode)->select('id', 'first_name')->get();
return response()->json($user);
}
我想我的控制器没有问题,因为它返回了正确的 JSON 数据
[{"id":1,"first_name":"William Hardiev"}]
但是当我测试我的代码时, uname 是未定义的。
form:Object
ucode:"williambola_05"
uname:undefined
谁能帮我这个?
您发出的是您从服务器收到的JSON
响应。 您正在从服务器获取JSON Array
,而您的JS
代码正在处理JSON object
你可以这样处理:
<template>
<div>
<h2>TESTING</h2>
<form @submit.prevent="submit">
<input
type="text"
class="form-control"
v-model="form.ucode"
@change="getUser()"
/>
<input type="text" class="form-control" v-model="form.uname" />
</form>
</div>
</template>
<script>
import axios from "axios";
export default {
data: function() {
return {
form: {
ucode: "",
uname: ""
}
};
},
methods: {
getUser() {
axios.get("api/checkUser/?ucode=" + this.form.ucode).then(res => {
this.form.uname = res.data[0].first_name;
});
}
}
};
</script>
或者您可以更改服务器端的 get 查询以简单地返回单个JSON object
而不是array
并且您的js
代码应该自动开始工作:
$user = DB::table('resellers')
->where('username', $ucode)
->select('id', 'first_name')
->first();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.