Filter with VueJS

前端 未结 2 474
遇见更好的自我
遇见更好的自我 2021-01-19 21:47

I am very new with VueJS so my question is very simple. I cannot use vue filter. Please help me fix the problem. My html file is shown as followed. When I try this code the

相关标签:
2条回答
  • 2021-01-19 22:41

    You can use a computed property.

    Markup:

    <div id="pan" class="pan">
         <div v-for="item in orderedList" >{{ item.id }}</div>
         <span class="pan__title">{{ message }}</span>
    </div>
    

    Definition inside of Vue:

    data(){
        sortKey : 'level'
    },
    computed : {
        orderedList(){ return this.list.sort(this.sorter) }
    },
    methods : {
        sorter(a,b){ return a[this.sortKey] > b[this.sortKey] }
    }
    

    And then you can change order of the elements in orderedList by modifying sortKey (using v-model="sortKey" to any kind of input, like <select></select> or any other way).

    Here is an example based on your code


    And what about uppercase, I prefer to control a view with css, and text-transform property can solve this: .pan__title { text-transform: uppercase; }. But you can define a computed property for this one too or keep it inline with {{ message.toUpperCase() }}.

    0 讨论(0)
  • 2021-01-19 22:45

    If you are using vuejs2, with vuejs2 uppercase filter has been removed. You will have to use toUpperCase() for this, like following:

    <span>{{message.toUpperCase()}}</span>
    

    see demo.

    Similarly orderBy filter also has been removed, vuejs2 suggests to use lodash’s orderBy (or possibly sortBy) in a computed property:

    HTML

    <p v-for="item in orderedList">{{ item.name }}</p>
    

    vue

    computed: {
      orderedList: function () {
        return _.orderBy(this.list, 'level')
      }
    }
    

    Here is demo with orderBy.

    0 讨论(0)
提交回复
热议问题