133 Deleting Items

15、TheResources.vue中添加deleteResource方法,并加到provide()中;然后在LearningResource.vue中使用(如果缺少id,需要props中添加id)

TheResources.vue

<template>
    <base-card>
        <base-button @click="selectTab('stored-resources')" :mode="storedResButtonMode">Stored Resources</base-button>
        <base-button @click="selectTab('add-resource')" :mode="addResButtonMode">Add Resource</base-button>
    </base-card>
    <keep-alive>
        <component :is="selectedTab"></component>
    </keep-alive>
</template>

<script>
import StoredResources from "@/components/learning-resources/StoredResources.vue";
import AddResource from "@/components/learning-resources/AddResource.vue";

export default {
    components: {
        StoredResources,
        AddResource,
    },
    computed: {
        storedResButtonMode() {
            return this.selectedTab === "stored-resources" ? null : 'flat';
        },
        addResButtonMode() {
            return this.selectedTab === "add-resource" ? null : 'flat';
        }
    },
    methods: {
        selectTab(tab) {
            this.selectedTab = tab;
        },
        addNewResource(title, description, link) {
            const newResource = {
                id: this.storedResources.length + 1,
                title: title,
                description: description,
                link: link
            };
            //this.storedResources.push(newResource); //add new resource to the end of the list
            this.storedResources.unshift(newResource); //add new resource to the beginning of the list
            this.selectTab('stored-resources');
        },
        deleteResource(id) {
            //和其它组件公用的是resourcesParams,所以改变storedResources不会看到删除生效
            //this.storedResources = this.storedResources.filter(resource => resource.id !== id);
            const resIndex = this.storedResources.findIndex(resource => resource.id === id);
            this.storedResources.splice(resIndex, 1);
        },

    },
    provide() {
        return {
            resourcesParams: this.storedResources,
            addNewResource: this.addNewResource,
            deleteResource: this.deleteResource,
        };
    },
    data() {
        return {
            selectedTab: "stored-resources",
            storedResources: [
                {
                    id: 'official-guide',
                    title: 'Official Guide',
                    description: 'The official guide for using Vue.js.',
                    link: 'https://vuejs.org/guide/',
                },
                {
                    id: 'api-reference',
                    title: 'API Reference',
                    description: 'The API reference for using Vue.js.',
                    link: 'https://vuejs.org/api/',
                },
                {
                    id: 'examples',
                    title: 'Examples',
                    description: 'A list of examples for using Vue.js.',
                    link: 'https://vuejs.org/examples/',
                }
            ]
        };
    },
};
</script>

LearningResource.vue

<template>
  <li>
    <base-card>
      <header>
        <h3>{{ title }}</h3>
        <base-button mode="flat" @click="deleteResource(id)">Delete</base-button>
      </header>

      <p>{{ description }}</p>
      <nav>
        <a :href="link">View Resource</a>
      </nav>
    </base-card>
  </li>
</template>

<script>

export default {
  props: ['id','title', 'description', 'link'],
  inject: ['deleteResource'],
}
</script>

<style scoped>
li {
  margin: auto;
  max-width: 40rem;
}

header {
  display: flex;
  justify-content: space-between;
  align-items: center;
}

h3 {
  font-size: 1.25rem;
  margin: 0.5rem 0;
}

p {
  margin: 0.5rem 0;
}

a {
  text-decoration: none;
  color: #ce5c00;
}

a:hover,
a:active {
  color: #c89300;
}
</style>

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黄健华Yeah

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值