404 单页应用 报错 路由_通过 Laravel 创建一个 Vue 单页面应用(五)

d4ec3cd4da1edb59aa205af50ef6a428.png
文章转发自专业的Laravel开发者社区,原始链接:https://learnku.com/laravel/t/34858

我们在第4部分完成了编辑用户的功能,并且学习了如何使用 v-model 来监听视图组件中用户信息的更改。现在我们可以开始构思删除用户功能,以及删除操作成功后如何处理 UI 变化。

在这个过程中,我们将会考虑构建一个 Axios 客户端实例,以便我们在配置 API 客户端时具有更高的灵活性。

更新 API 添加删除用户的功能

我们要做的第一件事就是定义删除单个用户的 API 路由。 得益于 Laravel 的路由模型绑定,我们只需要在 UsersController 中添加寥寥几行的代码就可以实现删除单个用户的功能:

public function destroy(User $user)
{$user->delete();return response(null, 204);
}

接下来,需要在 routes/api.php 文件的 Api 路由组的底部定义新的路由。

Route::namespace('Api')->group(function () {Route::get('/users', 'UsersController@index');Route::get('/users/{user}', 'UsersController@show');Route::put('/users/{user}', 'UsersController@update');Route::delete('/users/{user}', 'UsersController@destroy');
});

在前端删除用户

我们将通过编辑 UsersEdit.vue 组件,在Update按钮下新增一个Delete按钮的方式,向 /users/:id/edit 视图组件中添加删除功能。

<div class="form-group"><button type="submit" :disabled="saving">Update</button><button :disabled="saving" @click.prevent="onDelete($event)">Delete</button>
</div>

我们从Update按钮中复制 :disabled 属性到Delete按钮中,从而防止我们在执行某个操作时,导致意外的更新或者删除。

接下来,我们要在Delete按钮上绑定 onDelete() 回调,从而实现删除用户的功能。

onDelete() {this.saving = true;api.delete(this.user.id).then((response) => {console.log(response);});
}

我们在 API 客户端调用 delete() 方法 ,然后绑定一个回调函数来注销控制台中的响应对象。如果单击“删除”按钮 ,更新和删除按钮将被禁用,因为我们当前设置这个 this.saving = true —我们马上会讨论这个问题。 如果你开启了控制台,你将会看到一个内容为 204 No Content 的响应对象,这说明删除成功。

7f07d5c809e2b6c9d127a9e369f2fbea.png

如何对成功删除用户作出相应的反馈

与更新一个用户不同的一点是,一旦我们成功删除了一个用户记录,那么数据库中就没有这个用户的记录了。在传统的网页应用中,我们会删除那条用户记录,然后重定向返回用户列表。

在我们的SPA单页应用中,我们也可以通过编程方式将用户导航到 /users 页面的方式来实现这一点:

this.$router.push({ name: 'users.index' })

在我们的删除事件中应用 this.$router.push() 函数,最初版本的删除事件应该是这个样子:

onDelete() {this.saving = true;api.delete(this.user.id).then((response) => {this.$router.push({ name: 'users.index' });});
}

如果你刷新应用,并且删除一个用户,你将会注意到禁用按钮的一个短暂的闪烁,然后然后浏览器在没有任何反馈的情况下导航到 /users 页面。

我们可以使用一个专门的弹窗/通知机制来通知用户。抛砖引玉,我会提供给你一个粗略版本的代码,但是这只是我针对这个问题的一个基本的想法。

onDelete() {this.saving = true;api.delete(this.user.id).then((response) => {this.message = 'User Deleted';setTimeout(() => this.$router.push({ name: 'users.index' }), 2000);});
}

上面的代码设置了我们在第 4 部分中设置的 this.message 数据属性和在导航至/users 页面之前等待 2 秒钟。

699db91749c965628841dbbdab764185.png

你也可以使用诸如 portal-vue 之类的插件或者布局中的一个组件来临时闪烁消息(或者在消息弹出后,使用强制关闭按钮关闭),显示一个操作是否已经成功(或者失败),从而向用户提供反馈。

404

你可能注意到了即使我们的 Vue路由与 /users/:id/edit 模式相匹配, 但是当用户 id 不存在时,我们依然可能收到一个 404 的响应。

c0643c74695c8849c1426df835635a35.png

使用服务端的 Laravel 应用,我们可以很容易地从 ModelNotFoundException 渲染一个 404.blade.php 。不过SPA有些不同。 上述路由是有效的,所以我们需要我们的组件渲染 error 组件或者将用户重定向到一个专用的404路由。

我们将在 resources/assets/js/app.jsVue 路由的配置中添加一些新路由,这些路由提供一个专门的404视图和一个可以将所有无法匹配的路由重定向到404路由的万能路由

{ path: '/404', name: '404', component: NotFound },
{ path: '*', redirect: '/404' },

我们将会在 resources/assets/js/views/NotFound.vue 中创建一个简单的 NotFound组件 :

<template><div><h2>Not Found</h2><p>Woops! Looks like the page you requested cannot be found.</p></div>
</template>

因为在后端的Laravel程序中存在一个万能路由, 这意味着前端也需要这么一个万能路由,当访问路径与已经定义的路由不匹配时以一个404页面作为响应。这里有一个用作刷新的后台路由,它会捕获所有路由信息并且渲染SPA模板:

Route::get('/{any}', 'SpaController@index')->where('any', '.*');

如果你数入一个无效的 URL 比如 /does-not-exist,你会看到像下面的一堆东西:

6a01674a7e30feca1497fa99040b38a6.png

Vue路由器触发了会将浏览器重定向到 /404 的通配符路由规则。

对于我们之前举的一个无效用户id的样例,我们设置的规则仍然无法正常起作用 ,因为从技术上来说,这个路由是有效的。为了捕获在 create() 回调中失败的请求信息,以及将用户请求重定向到404路由,我们需要更新一下 UsersEdit

created() {api.find(this.$route.params.id).then((response) => {this.loaded = true;this.user = response.data.data;}).catch((err) => {this.$router.push({ name: '404' });});
}

现在,如果您直接向 /users/2000/edit 这样的 URI 发出请求,你应该会看到应用重定向到404页面,而不是挂在 UsersEdit 组件的“ Loading... ” UI 上。

API客户端选项

尽管我们奉献的 users.js 在小型应用程序中,HTTP 客户端可能被认为是有点小题大做了,我认为分离已经为我们提供了很好的服务,因为我们在多个组件中使用了 API 模块。如果你想了解灵活客户端提供的所有细节,我在我的文章构建灵活的Axios客户端中详细讨论了这个想法。 在不改变客户机的外部 API 的情况下,我们可以改变客户机在后台的工作方式。例如,我们可以创建一个具有自定义配置和默认值的 Axios 客户端实例:

import axios from 'axios';const client = axios.create({baseURL: '/api',
});export default {all(params) {return client.get('users', params);},find(id) {return client.get(`users/${id}`);},update(id, data) {return client.put(`users/${id}`, data);},delete(id) {return client.delete(`users/${id}`);},
};

现在,如果我想定制整个模块的工作方式而不影响方法,我可以在以后用一些配置替换掉 baseURL。

接下来是什么

我们学习了如何通过Vue路由器在前端删除用户并对成功删除做出响应.。我们通过在主app.js文件中用vue.use(vue router)注册vue路由器,引入了通过this.$router属性的编程导航。

接下来,我们将转向构建用户创建,以总结如何执行基本的创建、读取、更新和删除(CURD)操作。此时,您应该拥有自己完成创建新用户所需的所有工具,因此可以在本系列的下一篇文章发布之前尝试构建此功能。

准备好后,请查看第6部分-创建新用户

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/346179.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用计算机求解雷达方程,关于雷达方程

满意答案zjit99402014.01.27采纳率&#xff1a;41% 等级&#xff1a;12已帮助&#xff1a;2803人带宽校正系数是Co而不是Do.我们知道雷达接收到回波信号后&#xff0c;必须进行信号处理&#xff0c;使中频接收机的输出端(检波器的输入端)输出的信号和噪声功率比(简称信噪比)…

7500 cpuz跑分 i5_小米Pro笔记本亮相跑分网站:处理器包含AMD Zen3、11代酷睿

2020年已经接近尾声&#xff0c;随之而来的将会是一大波新品发布会&#xff0c;不仅是手机&#xff0c;笔记本电脑、显卡等产品也会有新品亮相。一年一度的CES 2021也即将开幕&#xff0c;届时英特尔、英伟达、AMD等知名厂商也都将出席活动。据悉&#xff0c;英特尔将推出11代酷…

2能不用cuda_洗洁精不用花钱买,自己在家就能做,成本2毛钱,比买的更好用

点击上面“妙招姐”免费关注图文版&#xff1a;哈喽大家好&#xff0c;我是妙招姐&#xff0c;洗洁精是我们生活中的必须品&#xff0c;但用洗洁精来清洗餐具或水果等和食物相关的东西多多少少都会有残留&#xff0c;那么今天妙招姐就来教大家用橘子皮来自己制作洗洁精&#xf…

centos模拟post请求_java模拟post和get请求(2019/10/25)

一、http含义的介绍1.http协议是超文本传输协议--具体含义请百度2.基于tcp/ip协议--注意和udp的区别3.无状态---本次请求记不住以往请求的状态4.无连接--每次连接只处理一个请求5.媒体独立二、请求报文的组成部分请求行 请求方式 请求url http协议版本请求头关于请求头和响应头…

浙江计算机二级报名步骤,浙江2016年9月计算机二级考生报名流程

导读&#xff1a;2016年9月浙江全国计算机二级考试网上报名时间为2016年6月1日-6月19日;现场缴费确认为6月1日6月20日&#xff0c;具体报名流程请看如下信息。想了解更多相关信息请持续关注我们应届毕业生考试网!(一)注册账号和登录1)考生首次登录系统需要注册登录通行证&#…

单开双控_卧室或者楼梯灯怎么安装单联双控

点击上面蓝色字体关注&#xff01;装修图例 | 别墅装修 | 装潢装饰 | 样板楼梯 | 装修设计在改电和布线前我们在这两个开关之间预埋3根线就够了。如果一头接电源&#xff0c;另一头接控制线的话&#xff0c;预埋2根线就够了&#xff0c;双控开关有三个接线柱&#xff0c;只要记…

Apache Ignite变得简单:第一个Java应用程序

在本文中&#xff0c;我们将更进一步&#xff0c;让您完成第一个Ignite应用程序的创建&#xff0c;以从分布式缓存中进行读写操作。 作为第一个示例&#xff0c;我们将尽可能简单地向您展示如何用Java编写用于处理Apache Ignite集群数据的应用程序。 可从GitHub存储库&#xf…

华测数据导出方法_输电线路塔基测量成图方法研究与应用

1.前言塔基测量成图软件是EATool第一个电力勘测模块&#xff0c;也是笔者个人刚参加工作时开发的第一个与工作直接相关的软件。该模块开发开始于2010年&#xff0c;于2012基本成型。记得第一次参加线路工程终勘定位&#xff0c;对于老员工的塔基断面测量模式有着诸多疑惑&#…

MQ在计算机组成,[转载]计算机组成框图-计算机运行流程(例子)

计算机组成框图-计算机运行流程ACC(Accumulator)&#xff1a; 累加器MQ(Multiplier-Quotient Register)&#xff1a;乘商寄存器ALU&#xff1a;算术逻辑单元X&#xff1a;操作数寄存器CU&#xff1a;控制单元IR(Instruction Register)&#xff1a;指令寄存器(用于存放当前指令)…

计算机硬盘怎么设置ntfs,Windows7系统如何把磁盘格式转换为NTFS的方法

今天朋友匆匆忙忙来找我&#xff1a;他的电脑因为某种情况&#xff0c;需要吧磁盘转换成ntfs格式&#xff0c;该怎么转换?Win7系统、利用系统自带工具转换1.我们打开我们的电脑磁盘&#xff0c;大家发现小编的电脑G盘是FAT32格式的&#xff0c;小编现在要把G盘转换为NTFS格式。…

ace unlck工具下载_压缩工具:WinRAR 曝出代码执行漏洞,该升级了

作为享誉全球的装机必备工具&#xff0c;「压缩软件」这四个字基本可以认为是 WinRAR 的专有名字了。只要有 PC 的地方&#xff0c;几乎都能看到 WinRAR 的身影。不过这款软件最近却被曝出了一个有19年历史的代码执行漏洞。WinRAR 宣称在全球拥有超过5亿的用户&#xff0c;目前…

关于计算机航天生物的想像作文,未来的航天器想象作文750字

未来的航天器想象作文750字到了2999年&#xff0c;人类发明出了一种新型的航天器。这种航天器机身类似我们现在的轿车&#xff0c;机身长10米&#xff0c;高度最高达4&#xff0c;最低达0.5米&#xff0c;材料是来自外星的软体金属&#xff0c;上面有一条会发光的物体&#xff…

哈罗单车怎么关锁还车_记者体验临沂共享单车定点还车 停错地方关不上锁

共享单车在给市民出行带来便利的同时&#xff0c;也引发了停放秩序混乱、妨碍市民通行等问题&#xff0c;为规范共享单车停放&#xff0c;兰山区在临沂市率先试点共享单车定点停放&#xff0c;并在特定区域施划共享单车定点停放区。据悉&#xff0c;临沂市兰山区第一批272个共享…

工业机器人 答案 韩建海_中国将连续8年成为工业机器人第一大市场,还将持续多久?...

2020年&#xff0c;中国工业机器人销售量&#xff0c;将会由负转正&#xff0c;销量预计再次突破15万台。2019年&#xff0c;约为14.4万台的销量。2013年——2020年中国工业机器人销量这已经是第八个年头&#xff0c;中国位居全球工业机器人销量第一大市场。工业机器人打磨工作…

java命令行参数工具_Java方法中的参数太多,第8部分:工具

java命令行参数工具在我的系列文章的前七篇文章中&#xff0c;有关处理Java方法中期望的参数过多的内容集中在减少方法或构造函数期望的参数数量的替代方法上。 在本系列的第八篇文章中&#xff0c;我将介绍一些工具&#xff0c;这些工具可帮助您确定可能存在过多参数的情况&am…

工具 每分钟_black: 一个不妥协的Python代码格式化工具

代码可读性是评判代码质量的标准之一&#xff0c;有一个衡量代码质量的标准是 Martin 提出的 “WFT” 定律&#xff0c;即每分钟爆出 “WTF” 的次数。你在读别人代码或者做 Code Review 的时候有没有 “WTF” 冲动呢&#xff1f;为了帮助开发者统一代码风格&#xff0c;Python…

使用Spring Rest和Spring Data JPA和H2以及Spring Boot示例的Restful API

你好朋友&#xff0c; 在本教程中&#xff0c;您将学习以下内容&#xff1a; 1.在Spring Boot中配置Spring Rest&#xff0c;Spring Data JPA和H2 2.使用Spring Boot创建Springful服务端点的Spring Rest&#xff0c;Spring Data JPA和H2的示例 3.使用Swagger测试Restful端点…

计算机IP地址pin,打印机的ip地址在机身上哪里,打印机的pin在哪看

打印机的ip地址在机身上哪里&#xff0c;打印机的pin在哪看时间&#xff1a;2021-04-19 10:38:04打印机是我们日常工作中必备的公办用品&#xff0c;但是对于刚接触打印机的电脑小白来说&#xff0c;打印机的网络设置可不简单&#xff0c;比如IP地址、pin码&#xff0c;他们可能…

开机启动失败_电脑常见开机引导错误的解决方法

电脑在开机启动过程中&#xff0c;经常会出现开机失败的故障&#xff0c;开机失败比较常出现在开机引导项错误的问题上&#xff0c;比如引导文件没了&#xff0c;硬盘有问题等等&#xff0c;有些小问题重启几遍可以解决&#xff0c;有些问题就只能修复。这边小编跟大家整理分享…

2020非全日计算机博士,在职攻读博士是不是非常难,免考在职博士和非全日博士有什么不同...

博士的含金量我们自然不容忽视&#xff0c;但博士又不是说三天打鱼两天晒网就可搞定的&#xff0c;都是要经过长久的沉淀以及耐心才能坚持下来的&#xff0c;博士少说也要读个四到五年方可毕业&#xff0c;但也有个别优秀的三年内就完成学业待着自己的成功找到了丰厚的薪资待遇…