Day028-透过Vuex-实作简易部落格-修改文章

Vue:实做部落格最後一步骤,就是修改文章!上一篇已经了解如何将id生成,如此才可以做个别文章上的操作。原先,在Article页面上,我们可以加上一个标示,让文章可以显示,到底是新增文章,还是编辑文章:
https://ithelp.ithome.com.tw/upload/images/20201012/20130654SKNesi38Eg.jpg
上图,若在文章列表上选择修改,会进入到以下页面:
https://ithelp.ithome.com.tw/upload/images/20201012/20130654KLrRj80mnr.jpg
所以,透过是否有id传入,来判断Add_Article的页面上,显示编辑或修改,这是一种很常见的做法。我们在路由上做为些许的调整:
https://ithelp.ithome.com.tw/upload/images/20201012/20130654VMvuH5pIuH.jpg
上图,将原本的Add_Article拆分为两种,一种为新增页面,另一种为修改编辑页面,并且允许传递参数。并且,进入修改界面前,需要将参数传递:

<td>
  <button 
    id="fixed"
    @click="$router.push(`/article/Add_Article/edit/${item.id}`)"
   >
        修改
  </button>
  <button id="delete" @click="deleteHandler(item.id)">
        删除
  </button>
</td>

点选修改後,参数传递於Add_Article页面,可以在此页面中新增props,接收id:

export default {
  props: {
    id: {},
}

在HTML上加上判断,如果有id传入,则为编辑页面,反之,为新增页面:

<h2>{{ id ? "编辑" : "新增" }}文章</h2>

如果上述都准备好了!接着就可以开始将文章传入~
传入也需要靠id来操作,因为在state里面存取了所有文章资料,唯独我们需要特定的文章:

fetchArticle() {
 const fetchArt = this.articles.filter((art) => art.id === this.id)[0];
 this.form.title = fetchArt.title;
 this.form.content = fetchArt.content;
}

设定上述方法後,我们希望在元件生成时产生:

created() {
    this.id && this.fetchArticle();
}

这样就完成文章显示於修改页面噜!

但是,光有这些还不行,原本的送出按键为新增文章。但现在,要有修改在送出了。也是透过id来判断为修改还是新增,并且在修改後,会dispatch Actions,如此,才会修改文章喔!

submitArticle() {
      if (this.id) {
        this.form.date = new Date().getTime();
        console.log("修改喔!");
        this.updateArticle({
          id: this.$route.params.id,
          newArticle: this.form,
        });
        alert("文章修改成功!");
      } else {
        this.form.date = new Date().getTime();
        this.addArticle(this.form);
        this.form = {
          title: "",
          date: "",
          content: "",
        };
        alert("文章新增成功");
      }
}

对於这边回传回mutation的部分,以往我们常用payload来做为概括性写法,但其实可以拆开来,分别对传送的表格进行资料处理:
Actions部分:
https://ithelp.ithome.com.tw/upload/images/20201012/20130654ZuvU5UgVYK.jpg
Mutation:
https://ithelp.ithome.com.tw/upload/images/20201012/20130654loclwesFeF.jpg
Vue:既然,你已经完成了简单板的部落格,现在是不是比较了解vue了呢~

待续......


<<:  [27] 30 天从 Swift 学会 Objective-C:Swift friendly 的 Unavailable 与 convenience init

>>:  第39天-学习 od 指令

day15 : NATS 、NATS Streaming、JetStream服务应用 on K8S (上)

k8s只是一个平台,要发挥他的价值就要让适合的服务运行在上面,所以从今天开始就会介绍一些有趣的服务(...

Day2 专案成立,来谈谈花钱的艺术

再来,谈到专案终於成案,老板放行以後,当然是很想好好大展身手。但是各路英雄好汉啊,有一个天敌,叫做一...

Day09 Platform Channel - BasicMessageChannel

如同前面介绍的,Flutter 定义了三种不同型别的Platform Channel 在platfo...

DAY27-SQL语法(VIEW 实作)

建立虚拟资料表有两个方法,今天要来示范第一个方法,我已第四章报表作为范例: 首先我们,先在你所使用的...

【D2】工具介绍

前言 在真正开始前,不免俗的需要介绍一下工作环境,让大家可以顺利地前进。因此在这边会稍微介绍一下使用...