I'm making sorting function by Vue js
Ideal behaviour is like this,
- order
Nameby ascending order whenasc by namebutton clicked -> done :) - order
Nameby descending order whendesc by namebutton clicked -> done :) - switch asc/desc function on/off by clicking itself. -> done :)
switch asc/desc function on/off by clicking the other button -> NOT WORKING!!
- ex1) click
desc by namebutton first, then, clickasc by namebutton -> done - ex2) click
asc by namebutton first, then, clickdesc by namebutton -> NOT WORKING!!
- ex1) click
I added switchng function on computed named sort.
I don't even know why ex1) works but ex2) doesn't
Please help if you know.
Thanks
new Vue({
el: '#app',
data: {
asc: false,
desc: false,
list: [],
},
created: function () {
axios.get('https://jsonplaceholder.typicode.com/users')
.then(function (response) {
this.list = response.data
}.bind(this)).catch(function (e) {
console.error(e)
})
},
methods: {
},
computed: {
sort: function() {
if (this.asc) { //ordered by asc
this.desc = false // NOT WORKING!!!
console.log(`this.desc ${this.desc}`);
return _.orderBy(this.list, 'name', 'asc')
} else if (this.desc) { //ordered by desc
this.asc = false
console.log(`this.asc ${this.asc}`);
return _.orderBy(this.list, 'name', 'desc')
}
},
sorted: function() {
if (this.asc) {
return this.sort
} else if (this.desc) {
return this.sort
} else {
return this.list
}
},
}
})
span {font-weight: bold;}
.is-active {background: turquoise;}
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/axios.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/lodash.min.js"></script>
<div id="app">
<ul>
<li v-for="item in sorted" :key="item.id">
<span>ID:</span> {{item.id}} , <span>Name:</span> {{item.name}} , <span>Company:</span> {{item.company.name}}
</li>
</ul>
<button :class="{'is-active': asc}" @click="asc=!asc">asc by name</button>
<button :class="{'is-active': desc}" @click="desc=!desc">desc by name</button>
</div>