laravel - Laravel Vue js 编辑模式:将值从字段传递到变量
问题描述
我对结合 Laravel 的 VueJS 非常陌生,所以我决定制作一个简单的 CRUD 应用程序,比如待办事项列表。我可以创建和读取数据。我的问题是我完全迷失了编辑部分。我想出了如何将数据传递给我的模式,但我不明白我必须做什么才能更新新的输入字段。我的问题是,如何将“正文”和“完成”字段传递给脚本中的变量?我知道我不能使用v-model
with :value
。预先感谢您的任何帮助。如果您在代码中发现任何错误,请告诉我,因为尽管我观看并阅读了教程,但我认为我的代码完全没有效率。
列表.vue
<template>
<div class="row justify-content-center">
<div class="col-md-12">
<div class="card">
<div class="card-header">User List</div>
<div class="card-body">
<table>
<tr>
<th width="50%">Completed</th>
<th width="50%">Task</th>
<th width="50%">Edit</th>
<th width="50%">Delete</th>
</tr>
<tr v-for="task in list" :key="task.id">
<td style="color: red" v-if="task.completed == 0">Uncompleted</td>
<td style="color: green" v-else>Completed</td>
<td>{{ task.body }}</td>
<td>
<button
v-if="task.id"
class="btn btn-success btn-sm"
@click="openModal(task.id)"
>
Edit
</button>
</td>
<td>Delete</td>
</tr>
</table>
</div>
</div>
<!--MODAL-->
<div v-if="myModal">
<div
class="modal fade"
id="EditModal"
tabindex="-1"
role="dialog"
aria-labelledby="exampleModalLabel"
aria-hidden="true"
>
<div
class="modal-dialog"
role="document"
v-for="task in update_list"
:key="task.id"
>
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLabel">
Task: {{ task.id }}
</h5>
</div>
<div class="modal-body">
<div class="form-group">
<label>Task</label>
<input
name="body"
type="text"
class="form-control"
:value="task.body"
/>
</div>
<div class="form-group">
<label>Completed:</label>
<select>
<option
name="completed"
:value="task.completed"
v-if="task.completed == 0"
>
Uncompleted
</option>
<option name="completed" value="1">Completed</option>
<option
name="completed"
:value="task.completed"
v-if="task.completed == 1"
>
Completed
</option>
<option name="completed" value="0">Uncompleted</option>
</select>
</div>
<br />
<div align="center">
<button
type="button"
class="btn btn-primary"
@click="editTask(task.id)"
>
Edit
</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
export default {
name: "List",
data() {
return {
list: {},
update_list: {},
myModal: false,
body: "",
completed: "",
};
},
methods: {
getList() {
axios.get("/task").then((response) => (this.list = response.data));
},
openModal(id) {
axios
.get("/" + id)
.then((response) => (this.update_list = response.data));
$("#EditModal").modal("show");
this.myModal = true;
},
editTask(id) {
console.log(id);
<!-- undefined vars-->
axios
.post("/task/" + id, {
body: this.update_list.body,
completed: this.update_list.completed,
})
.then((response) => {
$("#success").html(response.data.message);
window.location.reload(true);
});
},
},
created() {
this.getList();
this.openModal(id);
this.myModal = false;
this.list;
this.update_list;
this.body;
this.completed;
},
};
</script>
任务控制器.php
public function update(Request $request, $id)
{
$task = Task::where('id', $id)->first();
$task->body = $request->body;
$task->completed = $request->completed;
$task->save();
return response()->json([
'message' => 'Task updated'
]);
}
网页.php
Route::get('/task', [TaskController::class, 'index']);
Route::post('/', [TaskController::class, 'store']);
Route::get('/{id}', [TaskController::class, 'find']);
Route::post('/task/{id}', [TaskController::class, 'update']);
解决方案
由于您使用的是 SPA,因此您需要通过 API 路由而不是 Web 路由进行 API 调用。所以去 api.php 文件并在那里创建你的路线。顺便说一句,您需要使用 Sanctum SPA 身份验证来对此类操作进行身份验证。如果你使用 Laravel 8 并安装了 Jetstream,那么你已经有了 Sanctum。
api.php
Route::group(['middleware' => 'auth:sanctum'], function () {
Route::apiResources([
'tasks' => 'App\Http\Controllers\API\TaskController',
]);
});
要使用 CRUD 函数创建该控制器,请使用:
php artisan make:controller API/TaskController --api
在你的控制器中
public function update(Request $request, $id)
{
Task::find($id)->update($request->all());
return response()->json([
'message' => 'Task updated'
]);
}
推荐阅读
- influxdb - K6-InfluxDB-Docker- msg="Couldn't write stats" - 连接:连接被拒绝"
- java - 运算符 / 未定义参数类型 float,可选
- google-cloud-platform - 无法通过 SSH 连接到 Google Cloud Engine。引导错误
- r - 并排堆叠的不同颜色的条形图
- c++ - 这是升级标准库锁的有效方法吗?
- ajax - 在 Wordpress 上使用 ajax 的注册表单
- javascript - 从字节数组在javascript中创建文件对象
- postgresql - postgresql 性能 - 子查询后分组
- reactjs - 你能用 Redux Toolkit + Immer 改变有效载荷吗?
- amazon-web-services - AWS CloudFormation 忽略元数据中的包