Session 2

main
marcgauch 2023-01-16 21:57:08 +01:00
parent da0c4e925d
commit c335f5a31f
24 changed files with 1678 additions and 51 deletions

View File

@ -4,36 +4,35 @@ const app = Vue.createApp({
items: [
{ name: "aaa1", done: false },
{ name: "bbb2", done: true },
{name: "ccc3", done: false}
{ name: "ccc3", done: false },
],
toggle: false
toggle: false,
}),
methods: {
addToList() {
//this.items.push(this.inputValue) // nicht mehr brauchbar, da wir jetzt ein objekt haben
this.items.push({name: this.inputValue, done: false})
this.inputValue = "" //löscht das inputfeld wieder
this.items.push({ name: this.inputValue, done: false });
this.inputValue = ""; //löscht das inputfeld wieder
},
deleteAll() {
this.items = []
this.items = [];
},
deleteItem(index) {
//https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice
this.items.splice(index, 1) // mit (index, 2) löscht es zwei elemente
}
this.items.splice(index, 1); // mit (index, 2) löscht es zwei elemente
},
},
computed: {
totalCompletedTasks() {
let count = 0;
for (let i = 0; i < this.items.length; i++) {
if (this.items[i].done) {
count++
count++;
}
}
return count;
}
}
},
},
});
app.mount("#app");

30
session-2/frage-1/app.js Normal file
View File

@ -0,0 +1,30 @@
const app = Vue.createApp({
data() {
return {
tasks: [],
textfeld: "",
einblenden: true,
};
},
methods: {
addTasks() {
this.tasks.push(this.textfeld);
console.log(this.tasks);
},
einausblenden() {
this.einblenden = !this.einblenden;
},
},
computed: {
buttonCaption() {
// wenn die liste angezeigt wird (-> einblenden: true), dann gib "hide" zurück
// sonst gib "show" zurück
if (this.einblenden) {
return "hide";
} else {
return "show";
}
},
},
});
app.mount("#assignment");

View File

@ -0,0 +1,29 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>TITLE</title>
<link
href="https://fonts.googleapis.com/css2?family=Jost:wght@400;700&display=swap"
rel="stylesheet"
/>
<link rel="stylesheet" href="styles.css" />
<script src="https://unpkg.com/vue@next" defer></script>
<script src="app.js" defer></script>
</head>
<body>
<section id="assignment">
<input type="text" v-model="textfeld" />
<button @click="addTasks">Add Task</button>
<ul v-if="einblenden">
<!-- 2) Output the list of tasks here-->
<li v-for="task in tasks">{{ task }}</li>
</ul>
<p v-else>es wird nichts angezeigt...</p>
<!-- 3) When the below button is pressed, the list should be shown or hidden -->
<!-- BONUS: Also update the button caption -->
<button @click="einausblenden">{{buttonCaption}} List</button>
</section>
</body>
</html>

View File

@ -0,0 +1,64 @@
* {
box-sizing: border-box;
}
html {
font-family: 'Jost', sans-serif;
}
body {
margin: 0;
}
section {
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.26);
margin: 3rem;
border-radius: 10px;
padding: 1rem;
text-align: center;
}
h2 {
font-size: 2rem;
border-bottom: 4px solid #ccc;
color: #970076;
margin: 0 0 1rem 0;
}
p {
font-size: 1.25rem;
font-weight: bold;
background-color: #970076;
padding: 0.5rem;
color: white;
border-radius: 25px;
}
input {
font: inherit;
border: 1px solid #ccc;
}
input:focus {
outline: none;
border-color: #1b995e;
background-color: #d7fdeb;
}
button {
font: inherit;
cursor: pointer;
border: 1px solid #ff0077;
background-color: #ff0077;
color: white;
padding: 0.05rem 1rem;
box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.26);
}
button:hover,
button:active {
background-color: #ec3169;
border-color: #ec3169;
box-shadow: 1px 1px 4px rgba(0, 0, 0, 0.26);
}

View File

@ -0,0 +1,6 @@
# Q&A
## 1. Assignment 5
v-for mit ein und ausblenden button
_beantwortet in frage-1 order_

13
session-2/tryout/howto.md Normal file
View File

@ -0,0 +1,13 @@
# Step by Step preparation for the Exam
- Download the exam.zip on your computer
- Unzip it at a place of your choice
- Open Visual Studio Code
- Go to File -> Open Folder and select the exam folder
## Steps for task-4
- Go to Terminal -> New Terminal to open the terminal
- Go to the terminal an run `cd task-4`
- run `npm install`
- run `npm run dev`
- open the given locahost address with your browser
- If you see no error everything works and you can start with the task

BIN
session-2/tryout/task-1/.DS_Store vendored Normal file

Binary file not shown.

View File

@ -0,0 +1,17 @@
const app = Vue.createApp({
data() {
return {
title: "Vue.js",
link: "https://de.wikipedia.org/wiki/JavaScript",
input: "",
};
},
methods: {
showAlert() {
alert("This is an alert");
},
},
computed: {},
});
app.mount("#asdfereiaicicmkdjkasekjfasdf3e");

View File

@ -0,0 +1,46 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Task 1</title>
<link rel="stylesheet" href="https://unpkg.com/chota@latest" />
<script src="https://unpkg.com/vue@latest" defer></script>
<script src="app.js" defer></script>
</head>
<body>
<section class="container" id="asdfereiaicicmkdjkasekjfasdf3e">
<h1>Task 1</h1>
<div class="card">
<header>
<!--
1. Use a data property to show the header text in <h4> (Vue.js)
-->
<h4>{{title}}</h4>
</header>
<!--
2. Use data binding for the href attribute (https://de.wikipedia.org/wiki/JavaScript)
-->
<p>
is an open-source front end
<a v-bind:href="link">JavaScript</a>
framework.
</p>
<!--
3. Output any text you type into the input field, in the <p> below the input field.
-->
<p><input type="text" v-model="input" /></p>
<p>{{input}}</p>
<footer class="is-right">
<!--
4. Use click event binding to call a method which shows an alert
Hint: to show an alert use alert('This is an alert');
-->
<button class="button primary" @click="showAlert">Alert</button>
</footer>
</div>
</section>
</body>
</html>

BIN
session-2/tryout/task-4/.DS_Store vendored Normal file

Binary file not shown.

28
session-2/tryout/task-4/exam/.gitignore vendored Normal file
View File

@ -0,0 +1,28 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
node_modules
.DS_Store
dist
dist-ssr
coverage
*.local
/cypress/videos/
/cypress/screenshots/
# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?

View File

@ -0,0 +1,3 @@
{
"recommendations": ["Vue.volar", "Vue.vscode-typescript-vue-plugin"]
}

View File

@ -0,0 +1,29 @@
# exam
This template should help get you started developing with Vue 3 in Vite.
## Recommended IDE Setup
[VSCode](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur) + [TypeScript Vue Plugin (Volar)](https://marketplace.visualstudio.com/items?itemName=Vue.vscode-typescript-vue-plugin).
## Customize configuration
See [Vite Configuration Reference](https://vitejs.dev/config/).
## Project Setup
```sh
npm install
```
### Compile and Hot-Reload for Development
```sh
npm run dev
```
### Compile and Minify for Production
```sh
npm run build
```

View File

@ -0,0 +1,13 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="https://unpkg.com/chota@latest">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Exam App</title>
</head>
<body>
<div id="app"></div>
<script type="module" src="/src/main.js"></script>
</body>
</html>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,17 @@
{
"name": "exam",
"version": "0.0.0",
"private": true,
"scripts": {
"dev": "vite",
"build": "vite build",
"preview": "vite preview"
},
"dependencies": {
"vue": "^3.2.45"
},
"devDependencies": {
"@vitejs/plugin-vue": "^3.2.0",
"vite": "^3.2.4"
}
}

View File

@ -0,0 +1,37 @@
<!--
Task: Outsource the "Articles" from this News Site in a child component including Props
for the header and Paragraph Text.
The data for this Articles should come from the Parent SFC.
-->
<template>
<section class="container" id="app">
<!-- not part of the assignment-->
<Title title="News of the day" />
<div class="row">
<div class="col">
<Article header="Winter is coming!" text="Get your gear ready." />
</div>
<div class="col">
<Article header="Vue.js" text="Version 14 out now!" />
</div>
<div class="col">
<Article header="Chur" text="Swiss town out of Cheese!" />
</div>
<div class="col">
<Article header="FHGR" text="Data leaked from University." />
</div>
</div>
</section>
</template>
<script>
import Article from "./components/Article.vue";
import Title from "./components/Title.vue";
export default {
components: {
Article,
Title,
},
};
</script>

View File

@ -0,0 +1,37 @@
<!--
Task: Outsource the "Articles" from this News Site in a child component including Props
for the header and Paragraph Text.
The data for this Articles should come from the Parent SFC.
-->
<template>
<section class="container" id="app">
<Title title="News of the day" />
<div class="row">
<div class="col" v-for="article in articles">
<Article v-bind:header="article.header" :text="article.text"></Article>
</div>
</div>
</section>
</template>
<script>
import Article from "./components/Article.vue";
import Title from "./components/Title.vue";
export default {
data() {
return {
articles: [
{ header: "Winter is coming!", text: "Get your gear ready." },
{ header: "Vue.js", text: "Version 14 out now!" },
{ header: "Chur", text: "Swiss town out of Cheese!" },
{ header: "FHGR", text: "Data leaked from University." },
],
};
},
components: {
Article,
Title,
},
};
</script>

View File

@ -0,0 +1,14 @@
<template>
<div class="card">
<header>
<h4>{{ header }}</h4>
</header>
<p>{{ text }}</p>
</div>
</template>
<script>
export default {
props: ["header", "text"],
};
</script>

View File

@ -0,0 +1,14 @@
<template>
<div>
<h1>{{ title }}</h1>
<h3>the best news</h3>
<a href="mailto:me@hotmail.com">contact me</a>
<hr />
</div>
</template>
<script>
export default {
props: ["title"],
};
</script>

View File

@ -0,0 +1,5 @@
import { createApp } from 'vue'
import App from './App.vue'
const app = createApp(App);
app.mount('#app');

View File

@ -0,0 +1,14 @@
import { fileURLToPath, URL } from 'node:url'
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
// https://vitejs.dev/config/
export default defineConfig({
plugins: [vue()],
resolve: {
alias: {
'@': fileURLToPath(new URL('./src', import.meta.url))
}
}
})

View File

@ -0,0 +1,6 @@
{
"name": "task-4",
"lockfileVersion": 2,
"requires": true,
"packages": {}
}

View File

@ -1,7 +1,9 @@
const app = Vue.createApp({
data: () => ({
data() {
return {
text: "hello World",
}),
};
},
methods: {
date() {
return new Date().toLocaleDateString();
@ -9,10 +11,9 @@ const app = Vue.createApp({
},
computed: {
shouted() {
return this.text.toUpperCase()
}
}
return this.text.toUpperCase();
},
},
});
app.mount("#app");