Alexey Velikiy
8 years ago
8 changed files with 171 additions and 83 deletions
@ -1,35 +1,98 @@ |
|||||||
<!-- |
<!-- |
||||||
|
|
||||||
|
Links: |
||||||
|
Events: https://vuejs.org/v2/guide/events.html |
||||||
|
Computed properties: https://vuejs.org/v2/guide/computed.html |
||||||
|
|
||||||
|
Data: |
||||||
|
http://worldpopulationreview.com/states/ |
||||||
|
|
||||||
--> |
--> |
||||||
|
|
||||||
<template> |
<template> |
||||||
<div id="holder"> |
<div id="holder"> |
||||||
<us-map /> |
<div class="mapHolder"> |
||||||
<tooltip /> |
<us-map |
||||||
|
v-on:stateSelected="onStateSelected" |
||||||
|
v-on:stateDeselected="onStateDeselected" |
||||||
|
/> |
||||||
|
</div> |
||||||
|
<tooltip |
||||||
|
v-if="currentState" |
||||||
|
:title="currentState.Name" |
||||||
|
:description="currentStateDescription" |
||||||
|
/> |
||||||
</div> |
</div> |
||||||
</template> |
</template> |
||||||
|
|
||||||
<script> |
<script> |
||||||
|
|
||||||
var _ = require('lodash'); |
var _ = require('lodash'); |
||||||
|
|
||||||
const map = require('d3-components/basic-map-tooltip/map'); |
const map = require('d3-components/basic-map-tooltip/map'); |
||||||
const tooltip = require('d3-components/basic-map-tooltip/tooltip'); |
const tooltip = require('d3-components/basic-map-tooltip/tooltip'); |
||||||
|
|
||||||
|
const STATES_DATA_PATH = 'static/data/states-data.csv'; |
||||||
|
|
||||||
|
// lets load with vue-resource, but parse with d3 |
||||||
|
// just because we can |
||||||
|
import * as d3 from 'd3-dsv'; |
||||||
|
|
||||||
|
|
||||||
export default { |
export default { |
||||||
components: { |
components: { |
||||||
usMap: map, |
usMap: map, |
||||||
tooltip: tooltip |
tooltip: tooltip |
||||||
}, |
}, |
||||||
|
created: function() { |
||||||
|
var that = this; |
||||||
|
|
||||||
|
this.$http.get(STATES_DATA_PATH) |
||||||
|
.then(function(res) { |
||||||
|
this.statesData = {}; |
||||||
|
d3.dsvFormat(';') |
||||||
|
.parse(res.data, d => { |
||||||
|
var population = d["2017 Population"].split(',').join(''); |
||||||
|
d.value = +population; |
||||||
|
that.statesData[d.STATE_ABBR] = d; |
||||||
|
delete d["2017 Population"]; |
||||||
|
delete d["STATE_ABBR"]; |
||||||
|
return d; |
||||||
|
}); |
||||||
|
}) |
||||||
|
}, |
||||||
data: function() { |
data: function() { |
||||||
return { |
return { |
||||||
|
statesData: undefined, |
||||||
|
currentState: undefined |
||||||
|
} |
||||||
|
}, |
||||||
|
computed: { |
||||||
|
currentStateDescription: function() { |
||||||
|
return "Population: " + this.currentState.value; |
||||||
} |
} |
||||||
}, |
}, |
||||||
methods: { |
methods: { |
||||||
|
onStateSelected: function(stateCode) { |
||||||
|
this.currentState = this.statesData[stateCode]; |
||||||
|
}, |
||||||
|
onStateDeselected: function(stateCode) { |
||||||
|
this.currentState = undefined; |
||||||
|
} |
||||||
} |
} |
||||||
} |
} |
||||||
|
|
||||||
</script> |
</script> |
||||||
|
|
||||||
<style> |
<style scoped> |
||||||
|
#holder { |
||||||
|
position: relative; |
||||||
|
height: 300px; |
||||||
|
width: 500px; |
||||||
|
margin: auto; |
||||||
|
} |
||||||
|
.mapHolder { |
||||||
|
position: absolute; |
||||||
|
margin: auto; |
||||||
|
} |
||||||
</style> |
</style> |
||||||
|
|
File diff suppressed because one or more lines are too long
Loading…
Reference in new issue