Skip to content

Instantly share code, notes, and snippets.

<template>
<div>
<header class="header">
<nav class="header-nav" />
<div class="container">
<h1>My todo list</h1>
</div>
</header>
<main>
<div class="container">
<template>
<div id="app">
<router-view />
</div>
</template>
export interface ITodo {
id: number
userId: number
title: string
completed: boolean
}
@NovoManu
NovoManu / api.ts
Last active August 18, 2019 16:08
export class Api {
private baseUrl: string = 'https://jsonplaceholder.typicode.com/'
constructor(private url: string) {}
async fetch() {
const response = await fetch(`${this.baseUrl}${this.url}`)
return await response.json()
}
}
<template functional>
<header class="header">
<nav class="header-nav" />
<div class="container">
<h1>{{ props.listName }}</h1>
</div>
</header>
</template>
<style lang="scss" scoped>
.header {
<template>
<div>
<Header listName="My new todo list" />
<main>
<TodoList :todos="todos" />
</main>
</div>
</template>
<script lang="ts">
<template functional>
<div class="container">
<div class="todo-list">
<slot />
</div>
</div>
</template>
<style lang="scss" scoped>
.todo-list {
display: flex;
<template>
<div class="todo-list__task">
<span :class="{ 'todo-list__task--completed': todo.completed }">
{{ todo.title }}
</span>
</div>
</template>
<script lang="ts">
import { Component, Vue, Prop } from 'vue-property-decorator'
import { ITodo } from '@/types'
export class BaseApi {
protected baseUrl: string = 'https://jsonplaceholder.typicode.com/'
async fetch(url: string): Promise<any> {
const response = await fetch(`${this.baseUrl}${url}`)
return await response.json()
}
}
import axios from 'axios'
import { BaseApi } from '@/api/baseApi'
export class AxiosApi extends BaseApi {
constructor() {
super()
}
async fetch({ url }): Promise<any> {
const { data } = await axios.get(`${this.baseUrl}${url}`)
return data