From 05a232acca984ab49fd6af5fda03e63b99a0b078 Mon Sep 17 00:00:00 2001 From: akili sosa Date: Mon, 25 Nov 2024 15:35:06 -0600 Subject: [PATCH] set up amplify data with angular --- .../data/set-up-data/index.mdx | 153 +++++++++++++++++- 1 file changed, 150 insertions(+), 3 deletions(-) diff --git a/src/pages/[platform]/build-a-backend/data/set-up-data/index.mdx b/src/pages/[platform]/build-a-backend/data/set-up-data/index.mdx index 2c66cdce02f..0ec70df5a1c 100644 --- a/src/pages/[platform]/build-a-backend/data/set-up-data/index.mdx +++ b/src/pages/[platform]/build-a-backend/data/set-up-data/index.mdx @@ -398,7 +398,7 @@ Let's first add a button to create a new todo item. To make a "create Todo" API - + ```tsx title="src/TodoList.tsx" import type { Schema } from '../amplify/data/resource' @@ -422,6 +422,49 @@ export default function TodoList() { + + +```html title="src/app/todos/todos.component.html" + +
+

My todos

+ +
+ +``` + +```ts title="src/app/todos/todos.component.ts" + +... +import { generateClient } from 'aws-amplify/data'; +import type { Schema } from '../../../amplify/data/resource'; + +const client = generateClient(); + +@Component({ + selector: 'app-todos', + standalone: true, + imports: [CommonModule], + templateUrl: './todos.component.html', + styleUrl: './todos.component.css', +}) +export class TodosComponent implements OnInit { + + createTodo() { + try { + client.models.Todo.create({ + content: window.prompt('Todo content'), + }); + } catch (error) { + console.error('error creating todos', error); + } + } + +} + +``` +
+ @@ -651,7 +694,7 @@ Creating Todo successful. Next, list all your todos and then refetch the todos after a todo has been added: - + ```tsx title="src/TodoList.tsx" @@ -697,6 +740,57 @@ export default function TodoList() { + + +```html title="src/app/todos/todos.component.html" +
+

My todos

+ +
    +
  • + {{ todo.content }} +
  • +
+
+ +``` + +```ts title="src/app/todos/todos.component.ts" +... +export class TodosComponent implements OnInit { + todos: any[] = []; + + ngOnInit() { + this.fetchTodos(); + } + + async createTodo() { + try { + await client.models.Todo.create({ + content: window.prompt('Todo content'), + }); + } catch (error) { + console.error('error creating todos', error); + } + await this.fetchTodos(); + } + + async fetchTodos() { + try { + const todos = (await client.models.Todo.list()).data; + this.todos = [...todos] + } catch (error) { + console.error('error fetching todos', error); + } + } + +} + +``` +
+ + ```html title="src/TodoList.vue" @@ -954,7 +1048,7 @@ class _MyHomePageState extends State { ## Subscribe to real-time updates - + You can also use `observeQuery` to subscribe to a live feed of your backend data. Let's refactor the code to use a real-time observeQuery instead. @@ -1002,6 +1096,59 @@ export default function TodoList() { + + +```ts title="src/app/todos/todos.component.ts" +import { Component, OnInit } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { generateClient } from 'aws-amplify/data'; +import type { Schema } from '../../../amplify/data/resource'; + +const client = generateClient(); + +@Component({ + selector: 'app-todos', + standalone: true, + imports: [CommonModule], + templateUrl: './todos.component.html', + styleUrl: './todos.component.css', +}) +export class TodosComponent implements OnInit { + todos: any[] = []; + + ngOnInit(): void { + this.listTodos(); + } + + + listTodos() { + try { + client.models.Todo.observeQuery().subscribe({ + next: ({ items, isSynced }) => { + this.todos = [...items]; + }, + }); + } catch (error) { + console.error('error fetching todos', error); + } + } + + async createTodo() { + try { + await client.models.Todo.create({ + content: window.prompt('Todo content'), + }); + } catch (error) { + console.error('error creating todos', error); + } + } +} + +``` + + + + ```html title="src/TodoList.vue"