I think you have overlooked how Vue's model binding works. I've forked a template on Codepen with an example.
https://codepen.io/gregrobson/pen/LONXxK
N.B. When Vue starts up it will remove items like selected="selected" - the Vue model determines the properties - nothing else.
You will see in the Javascript on line 743 I have put selected: 'GB', - when Vue has instantiated it will see "GB" and will set appropriate item as selected in the form element.
If you are using Vue then you should just have a template in HTML.
<select v-model="chosenComp">
<option v-for="comp in competitions" v-bind:value="comp.slug">{{ comp.name }}</option>
</select>
...where your data resembles...
data: {
chosenComp: "",
competitions: {
{ slug: "game-of-life", name: "Game of Life" }
// more competitions here
}
After data has been updated assign chosenComp = competitions[0].slug - then v-model gets updated and the first option will be highlighted. (Assuming that you have at least 1 competition in the array).