60 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			60 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
<html>
 | 
						|
<head>
 | 
						|
    <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet">
 | 
						|
    <title>The Elections</title>
 | 
						|
</head>
 | 
						|
<!-- listening for keyboard event -->
 | 
						|
<body @keyup.c="clear">
 | 
						|
<div class="container">
 | 
						|
    <h1>People of Vue</h1>
 | 
						|
    <ul class="list-group">
 | 
						|
        <li v-for="candidate in candidates" class="list-group-item">
 | 
						|
            {{candidate.name}} {{candidate.votes}}
 | 
						|
            <!-- increase votes 'on:click'-->
 | 
						|
            <button class="btn btn-default" @click="candidate.votes++">Vote</button>
 | 
						|
        </li>
 | 
						|
    </ul>
 | 
						|
 | 
						|
    <!-- display the name of the 'mayor' using a computed property-->
 | 
						|
    <h2>Our mayor is {{mayor.name}}!</h2>
 | 
						|
 | 
						|
    <pre>{{ $data | json }}</pre>
 | 
						|
    <pre>{{ mayor | json }}</pre>
 | 
						|
</div>
 | 
						|
</body>
 | 
						|
<script src="http://cdnjs.cloudflare.com/ajax/libs/vue/1.0.26/vue.js"></script>
 | 
						|
<script type="text/javascript">
 | 
						|
    var vm = new Vue({
 | 
						|
        el: 'body',
 | 
						|
        data: {
 | 
						|
            candidates: [
 | 
						|
                {name: "Mr. Black", votes: 140},
 | 
						|
                {name: "Mr. White", votes: 135},
 | 
						|
                {name: "Mr. Pink", votes: 145},
 | 
						|
                {name: "Mr. Brown", votes: 130},
 | 
						|
            ]
 | 
						|
        },
 | 
						|
        computed: {
 | 
						|
            mayor: function () {
 | 
						|
                //first we sort the array descending
 | 
						|
                var candidatesSorted = this.candidates.sort(function (a, b) {
 | 
						|
                    return b.votes - a.votes;
 | 
						|
                });
 | 
						|
                //the mayor will be the first item
 | 
						|
                return candidatesSorted[0];
 | 
						|
            }
 | 
						|
        },
 | 
						|
        methods: {
 | 
						|
            //this method runs when the key 'c' is pressed
 | 
						|
            clear: function () {
 | 
						|
                //Turn votes of all candidate to 0 using map() function.
 | 
						|
                this.candidates = this.candidates.map(function (candidate) {
 | 
						|
                    candidate.votes = 0;
 | 
						|
                    return candidate;
 | 
						|
                })
 | 
						|
            }
 | 
						|
        }
 | 
						|
    })
 | 
						|
</script>
 | 
						|
</html>
 |