Session 2
This commit is contained in:
		
							parent
							
								
									da0c4e925d
								
							
						
					
					
						commit
						c335f5a31f
					
				@ -1,39 +1,38 @@
 | 
			
		||||
const app = Vue.createApp({
 | 
			
		||||
    data: () => ({
 | 
			
		||||
      inputValue: "",
 | 
			
		||||
      items: [
 | 
			
		||||
        {name: "aaa1", done: false},
 | 
			
		||||
        {name: "bbb2", done: true},
 | 
			
		||||
        {name: "ccc3", done: 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
 | 
			
		||||
      },
 | 
			
		||||
      deleteAll() {
 | 
			
		||||
        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
 | 
			
		||||
      }
 | 
			
		||||
  data: () => ({
 | 
			
		||||
    inputValue: "",
 | 
			
		||||
    items: [
 | 
			
		||||
      { name: "aaa1", done: false },
 | 
			
		||||
      { name: "bbb2", done: true },
 | 
			
		||||
      { name: "ccc3", done: 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
 | 
			
		||||
    },
 | 
			
		||||
    computed: {
 | 
			
		||||
      totalCompletedTasks() {
 | 
			
		||||
          let count = 0;
 | 
			
		||||
          for (let i = 0; i < this.items.length; i++){
 | 
			
		||||
            if (this.items[i].done){
 | 
			
		||||
              count++
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
          return count;
 | 
			
		||||
    deleteAll() {
 | 
			
		||||
      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
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
  computed: {
 | 
			
		||||
    totalCompletedTasks() {
 | 
			
		||||
      let count = 0;
 | 
			
		||||
      for (let i = 0; i < this.items.length; i++) {
 | 
			
		||||
        if (this.items[i].done) {
 | 
			
		||||
          count++;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
  });
 | 
			
		||||
  
 | 
			
		||||
  app.mount("#app");
 | 
			
		||||
  
 | 
			
		||||
      }
 | 
			
		||||
      return count;
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
app.mount("#app");
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										30
									
								
								session-2/frage-1/app.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								session-2/frage-1/app.js
									
									
									
									
									
										Normal 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");
 | 
			
		||||
							
								
								
									
										29
									
								
								session-2/frage-1/index.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								session-2/frage-1/index.html
									
									
									
									
									
										Normal 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>
 | 
			
		||||
							
								
								
									
										64
									
								
								session-2/frage-1/styles.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								session-2/frage-1/styles.css
									
									
									
									
									
										Normal 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);
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
							
								
								
									
										6
									
								
								session-2/fragen-und-antworten.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								session-2/fragen-und-antworten.md
									
									
									
									
									
										Normal 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
									
								
							
							
						
						
									
										13
									
								
								session-2/tryout/howto.md
									
									
									
									
									
										Normal 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
									
								
							
							
						
						
									
										
											BIN
										
									
								
								session-2/tryout/task-1/.DS_Store
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										17
									
								
								session-2/tryout/task-1/app.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								session-2/tryout/task-1/app.js
									
									
									
									
									
										Normal 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");
 | 
			
		||||
							
								
								
									
										46
									
								
								session-2/tryout/task-1/index.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								session-2/tryout/task-1/index.html
									
									
									
									
									
										Normal 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
									
								
							
							
						
						
									
										
											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
									
								
							
							
						
						
									
										28
									
								
								session-2/tryout/task-4/exam/.gitignore
									
									
									
									
										vendored
									
									
										Normal 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?
 | 
			
		||||
							
								
								
									
										3
									
								
								session-2/tryout/task-4/exam/.vscode/extensions.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								session-2/tryout/task-4/exam/.vscode/extensions.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,3 @@
 | 
			
		||||
{
 | 
			
		||||
  "recommendations": ["Vue.volar", "Vue.vscode-typescript-vue-plugin"]
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										29
									
								
								session-2/tryout/task-4/exam/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								session-2/tryout/task-4/exam/README.md
									
									
									
									
									
										Normal 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
 | 
			
		||||
```
 | 
			
		||||
							
								
								
									
										13
									
								
								session-2/tryout/task-4/exam/index.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								session-2/tryout/task-4/exam/index.html
									
									
									
									
									
										Normal 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>
 | 
			
		||||
							
								
								
									
										1205
									
								
								session-2/tryout/task-4/exam/package-lock.json
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										1205
									
								
								session-2/tryout/task-4/exam/package-lock.json
									
									
									
										generated
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										17
									
								
								session-2/tryout/task-4/exam/package.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								session-2/tryout/task-4/exam/package.json
									
									
									
									
									
										Normal 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"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										37
									
								
								session-2/tryout/task-4/exam/src/App-solved.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								session-2/tryout/task-4/exam/src/App-solved.vue
									
									
									
									
									
										Normal 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>
 | 
			
		||||
							
								
								
									
										37
									
								
								session-2/tryout/task-4/exam/src/App.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								session-2/tryout/task-4/exam/src/App.vue
									
									
									
									
									
										Normal 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>
 | 
			
		||||
							
								
								
									
										14
									
								
								session-2/tryout/task-4/exam/src/components/Article.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								session-2/tryout/task-4/exam/src/components/Article.vue
									
									
									
									
									
										Normal 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>
 | 
			
		||||
							
								
								
									
										14
									
								
								session-2/tryout/task-4/exam/src/components/Title.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								session-2/tryout/task-4/exam/src/components/Title.vue
									
									
									
									
									
										Normal 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>
 | 
			
		||||
							
								
								
									
										5
									
								
								session-2/tryout/task-4/exam/src/main.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								session-2/tryout/task-4/exam/src/main.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,5 @@
 | 
			
		||||
import { createApp } from 'vue'
 | 
			
		||||
import App from './App.vue'
 | 
			
		||||
 | 
			
		||||
const app = createApp(App);
 | 
			
		||||
app.mount('#app');
 | 
			
		||||
							
								
								
									
										14
									
								
								session-2/tryout/task-4/exam/vite.config.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								session-2/tryout/task-4/exam/vite.config.js
									
									
									
									
									
										Normal 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))
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
})
 | 
			
		||||
							
								
								
									
										6
									
								
								session-2/tryout/task-4/package-lock.json
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								session-2/tryout/task-4/package-lock.json
									
									
									
										generated
									
									
									
										Normal file
									
								
							@ -0,0 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "task-4",
 | 
			
		||||
  "lockfileVersion": 2,
 | 
			
		||||
  "requires": true,
 | 
			
		||||
  "packages": {}
 | 
			
		||||
}
 | 
			
		||||
@ -1,18 +1,19 @@
 | 
			
		||||
const app = Vue.createApp({
 | 
			
		||||
    data: () => ({
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      text: "hello World",
 | 
			
		||||
    }),
 | 
			
		||||
    methods: {
 | 
			
		||||
      date() {
 | 
			
		||||
        return new Date().toLocaleDateString();
 | 
			
		||||
      },
 | 
			
		||||
    };
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
    date() {
 | 
			
		||||
      return new Date().toLocaleDateString();
 | 
			
		||||
    },
 | 
			
		||||
    computed: {
 | 
			
		||||
        shouted() {
 | 
			
		||||
            return this.text.toUpperCase()
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
  });
 | 
			
		||||
  
 | 
			
		||||
  app.mount("#app");
 | 
			
		||||
  
 | 
			
		||||
  },
 | 
			
		||||
  computed: {
 | 
			
		||||
    shouted() {
 | 
			
		||||
      return this.text.toUpperCase();
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
app.mount("#app");
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user