80 lines
2.7 KiB
HTML
80 lines
2.7 KiB
HTML
|
<html>
|
||
|
<head>
|
||
|
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet">
|
||
|
<title>Horse-drawn Chariots</title>
|
||
|
</head>
|
||
|
<body>
|
||
|
<div class="container">
|
||
|
<h1>Chariot shopping</h1>
|
||
|
<ul class="list-group">
|
||
|
<!-- '.sync' ensures two-way binding between child's property and parent's one -->
|
||
|
<chariot v-for="chariot in chariots" :chariot="chariot" :selected.sync="selected"></chariot>
|
||
|
</ul>
|
||
|
<pre>{{ $data | json }}</pre>
|
||
|
</div>
|
||
|
<!-- component template -->
|
||
|
<template id="chariot-template">
|
||
|
<li class="list-group-item">
|
||
|
<h4>"{{ chariot.name }}" chariot has <strong>{{ chariot.horses }}</strong> horse(s)!</h4>
|
||
|
<!-- 'disabled' attribute is applied conditionally -->
|
||
|
<button @click="rideChariot(chariot)" class="btn btn-primary" :disabled="isSelectedChariot">
|
||
|
{{ action }}
|
||
|
</button>
|
||
|
</li>
|
||
|
</template>
|
||
|
<!-- end component template -->
|
||
|
</body>
|
||
|
<script src="http://cdnjs.cloudflare.com/ajax/libs/vue/1.0.26/vue.js"></script>
|
||
|
<script type="text/javascript">
|
||
|
Vue.component('chariot', {
|
||
|
props: ['chariot', 'selected'],
|
||
|
template: "#chariot-template",
|
||
|
methods: {
|
||
|
rideChariot: function (chariot) {
|
||
|
this.selected = chariot;
|
||
|
},
|
||
|
},
|
||
|
computed: {
|
||
|
//is true when the chariot has more horses than the selected one
|
||
|
hasMoreHorses: function () {
|
||
|
return this.selected.horses < this.chariot.horses
|
||
|
},
|
||
|
//is true when the chariot is the selected one
|
||
|
isSelectedChariot: function () {
|
||
|
return this.selected.name == this.chariot.name
|
||
|
},
|
||
|
//is true when there is no chariot selected
|
||
|
noChariot: function () {
|
||
|
return this.selected.name == null;
|
||
|
},
|
||
|
//define the action for each chariot
|
||
|
action: function () {
|
||
|
if (this.noChariot) {
|
||
|
action = 'Pick Chariot'
|
||
|
} else if (this.isSelectedChariot) {
|
||
|
action = 'Riding!'
|
||
|
} else if (this.hasMoreHorses) {
|
||
|
action = 'Hire Horses'
|
||
|
} else {
|
||
|
action = 'Dismiss Horses'
|
||
|
}
|
||
|
return action;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
});
|
||
|
var vm = new Vue({
|
||
|
el: 'body',
|
||
|
data: {
|
||
|
chariots: [
|
||
|
{name: "Olympus", horses: 4},
|
||
|
{name: "Sagitta", horses: 3},
|
||
|
{name: "Icarus", horses: 2},
|
||
|
{name: "Abraxas", horses: 1},
|
||
|
],
|
||
|
//the currently selected 'chariot'
|
||
|
selected: {}
|
||
|
},
|
||
|
})
|
||
|
</script>
|
||
|
</html>
|