博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
编辑文章
阅读量:7203 次
发布时间:2019-06-29

本文共 2577 字,大约阅读时间需要 8 分钟。

1). 添加编辑文章路由

打开 src/router/routes.js 文件,在数组的最后面,添加编辑文章路由 Edit

src/router/routes.js

1   // Edit2   {3     path: '/articles/:articleId/edit',4     name: 'Edit',5     component: () => import('@/views/articles/Create'),6     meta: { auth: true }7   },

我们这里使用了跟 Create 一样的组件页面,但将其路径指向一个新的地址,并命名为 Edit

2). 添加编辑入口

1、打开 src/views/articles/Content.vue 文件,复制以下代码替换原 <script>

src/views/articles/Content.vue

1 

2、查找 <div class="markdown-body",在其后面添加『编辑删除图标』:

1 
2 3
4

我们先判断用户是否已登录,已登录且当前用户 ID 为 1 时,渲染编辑删除图标。

3). 添加编辑文章逻辑

打开 src/store/actions.js 文件,复制以下代码替换原 post 事件:

src/store/actions.js

1 export const post = ({ commit, state }, { article, articleId }) => { 2   let articles = state.articles 3  4   if (!Array.isArray(articles)) articles = [] 5  6   if (article) { 7     const uid = 1 8     const { title, content } = article 9     const date = new Date()10 11     if (articleId === undefined) {12       const lastArticle = articles[articles.length - 1]13 14       if (lastArticle) {15         articleId = parseInt(lastArticle.articleId) + 116       } else {17         articleId = articles.length + 118       }19 20       articles.push({21         uid,22         articleId,23         title,24         content,25         date26       })27     }else { // 如果有传 articleId28   // 遍历所有文章29   for (let article of articles) {30     // 找到与 articleId 对应的文章31     if (parseInt(article.articleId) === parseInt(articleId)) {32       // 更新文章的标题33       article.title = title34       // 更新文章的内容35       article.content = content36       break37     }38   }39 }40     commit('UPDATE_ARTICLES', articles)41     router.push({ name: 'Content', params: { articleId, showMsg: true } })42   }43 }

4). 修改创作文章页面

1、打开 src/views/articles/Create.vue 文件,复制以下代码替换原 <script>

src/views/articles/Create.vue

1 

上面代码的核心就是利用路由参数的 articleId,获取对应的文章数据,来填充编辑页面。在不同的编辑页面之间跳转(如 /articles/1/edit 和 /articles/2/edit)时,因为我们会优先填充自动保存的数据,所以需要先调用 clearData 清空它们。

涉及的新知识点:

1 beforeRouteLeave(to, from, next) {2   this.clearData()3   next()4 }

beforeRouteLeave 是组件内的守卫,在离开该组件的对应路由时调用,此时可以访问 this,需要使用 next() 确认导航。

监听 '$route'

1 watch: {2   '$route'(to) {3     this.clearData()4     this.setArticleId(to.params.articleId)5   }6 }

我们可以通过监听 '$route' 来得知路由参数的变化,我们通常会在两个路由都渲染相同的组件时监听 '$route',这是因为 Vue 会复用组件实例,以导致组件内的部分钩子不再被调用。举例来说,我们的『编辑文章』和 『创作文章』都使用 Create.vue 组件,当我们从『编辑文章』导航到『创作文章』时(在编辑文章页面点击创作文章按钮),beforeRouteEnter 就不会被调用,所以我们需要监听 '$route',以响应路由参数的变化。

2、查找 <h2 class="text-center">,作如下修改:

1 
2

创作文章

3
4

{
{ articleId ? '编辑文章' : '创作文章' }}

 

转载地址:http://ffzum.baihongyu.com/

你可能感兴趣的文章
我的友情链接
查看>>
使用MySqldump命令导出数据时的注意
查看>>
Install andConfigure OpenStack Dashboard Service (Horizon) for Ubuntu 14.04
查看>>
javascript——数组的那些事
查看>>
lsof 列出进程打开的文件
查看>>
办公软件WORD,给自己来个私人订制模板
查看>>
Brocade 300 FC交换机收集诊断日志
查看>>
解决(inode)索引节点用满导致故障的方法
查看>>
ORACLE 10g下载|ORACLE 10g下载地址|ORACLE 10g官网下载地址
查看>>
Create an Auto-Incrementing Sequence Field
查看>>
我的友情链接
查看>>
Flutter第六期 - ListView+GridView混合
查看>>
Servlet快速入门
查看>>
mysql性能测试工具之sysbench
查看>>
python获取类名函数名、脚本路径
查看>>
Hadoop hive sqoop zookeeper hbase生产环境日志统计应用案例(故障篇)
查看>>
sudo日志文件跟踪
查看>>
游戏开发路线图
查看>>
内存分配方式及常见错误
查看>>
phpcms去掉前台和后台登录验证码
查看>>