File tree 7 files changed +132
-0
lines changed
7 files changed +132
-0
lines changed Original file line number Diff line number Diff line change
1
+ Vue . component ( 'task-add' , {
2
+ template : `
3
+ <div>
4
+ <input v-on:keyup.enter="addToList" v-model="newItemText" type="text" placeholder="insert task to list.."/>
5
+ <button v-on:click="addToList">
6
+ Add Item
7
+ </button>
8
+ </div>
9
+ ` ,
10
+ data : function ( ) {
11
+ return {
12
+ newItemText :""
13
+ }
14
+ } ,
15
+ props : [ 'items' ] ,
16
+ methods : {
17
+ addToList : function ( ) {
18
+ if ( this . items . indexOf ( this . newItem ) >= 0 ) {
19
+ } else this . items . push ( {
20
+ text : this . newItemText ,
21
+ activity : false ,
22
+ id : this . items . length
23
+ } ) ;
24
+ this . newItem = { text : null } ;
25
+ } ,
26
+ } ,
27
+ } ) ;
28
+
29
+
Original file line number Diff line number Diff line change
1
+ Vue . component ( 'task-delete' , {
2
+ template :`<button v-bind:style="{'background-color':'yellow'}" @click="removeItem" >Delete</button>` ,
3
+ props : [ 'item' ] ,
4
+ methods : {
5
+ removeItem :function ( ) {
6
+ this . $emit ( "remove-item" , this . item ) ;
7
+ }
8
+ }
9
+ } ) ;
Original file line number Diff line number Diff line change
1
+ Vue . component ( 'task-details' , {
2
+ template : `
3
+ <div v-if="selectedItem">
4
+ <label for="item-text">text:</label>
5
+ <input id="item-text" type=text v-model="selectedItem.text"/>
6
+ <button v-bind:style="{'background-color': selectedItem.activity ? '#4CAF50' : 'red'}" v-on:click="selectedItem.activity = !selectedItem.activity">{{selectedItem.activity}}</button>
7
+ <task-delete :item="selectedItem" v-on:remove-item="removeItem"></task-delete>
8
+ </div>
9
+ ` ,
10
+ props : [ 'selectedItem' ] ,
11
+ data : function ( ) {
12
+ return {
13
+ }
14
+ } ,
15
+ methods : {
16
+ removeItem : function ( item ) {
17
+ this . $emit ( "remove-item" , item ) ;
18
+ }
19
+ }
20
+ } ) ;
Original file line number Diff line number Diff line change
1
+ Vue . component ( "task-item" , {
2
+ template :` <div @click='selectItemEdit(item)' v-bind:style="{'text-decoration': item.activity ? 'line-through' : null}">{{item.text}} </div>` ,
3
+ props : [ 'item' ] ,
4
+ methods :{
5
+ selectItemEdit : function ( item ) {
6
+ this . $emit ( 'select-item' , item ) ;
7
+ } ,
8
+ }
9
+ } ) ;
Original file line number Diff line number Diff line change
1
+ Vue . component ( 'task-list' , {
2
+ template : `
3
+ <div>
4
+ <ul>
5
+ <li v-for="item in items">
6
+ <task-item :item="item" v-on:select-item="selectItemEdit"></task-item>
7
+ </li>
8
+ </ul>
9
+ </div>
10
+ ` ,
11
+ props : [ 'items' , 'selectedItem' ] ,
12
+ methods : {
13
+ selectItemEdit : function ( item ) {
14
+ this . $emit ( 'select-item' , item ) ;
15
+ } ,
16
+ } ,
17
+ } ) ;
Original file line number Diff line number Diff line change
1
+ <!DOCTYPE html>
2
+ < html lang ="en ">
3
+ < head >
4
+ < meta charset ="UTF-8 ">
5
+ < title > Title</ title >
6
+ </ head >
7
+ < body >
8
+
9
+ < div id ="app ">
10
+ < task-add :items ="items "> </ task-add >
11
+ < task-list :items ="items " v-on:select-item ="selectItem " v-on:remove-item ="removeItem " :selected-item ="selectedItem "> </ task-list >
12
+ < task-details :selected-item ="selectedItem " v-on:remove-item ="removeItem "> </ task-details >
13
+ </ div >
14
+
15
+ < script src ="https://unpkg.com/vue "> </ script >
16
+ < script src ="components/task-add.js "> </ script >
17
+ < script src ="components/task-list.js "> </ script >
18
+ < script src ="components/task-details.js "> </ script >
19
+ < script src ="components/task-delete.js "> </ script >
20
+ < script src ="components/task-item.js "> </ script >
21
+ < script src ="todo.js "> </ script >
22
+ </ body >
23
+ </ html >
Original file line number Diff line number Diff line change
1
+ var app = new Vue ( {
2
+ el : '#app' ,
3
+ data : {
4
+ items : [ ] ,
5
+ selectedItem : null ,
6
+ } ,
7
+ methods : {
8
+ selectItem : function ( item ) {
9
+ console . log ( 'selectItem: ' , item ) ;
10
+ this . selectedItem = item ;
11
+ } ,
12
+ removeItem : function ( itemToRemove ) {
13
+ console . log ( 'removeItem: ' , itemToRemove ) ;
14
+ var idx = this . items . map ( function ( item ) {
15
+ return item . id ;
16
+ } ) . indexOf ( itemToRemove . id ) ;
17
+
18
+ if ( idx !== - 1 ) {
19
+ this . items . splice ( idx , 1 ) ;
20
+ }
21
+
22
+ this . selectedItem = null ;
23
+ }
24
+ }
25
+ } ) ;
You can’t perform that action at this time.
0 commit comments