首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Vue + Axios中使用List.JS?

如何在Vue + Axios中使用List.JS?
EN

Stack Overflow用户
提问于 2018-02-13 03:54:37
回答 1查看 940关注 0票数 0

我以前成功地使用过List.JS,但这次我尝试将其用于JSON数据列表的Vue.JS呈现。

我在顶部有一个按钮,当点击时,应该只显示QB位置球员。

不幸的是,我什么都没有得到,所有列表项都被删除了,而且我在控制台中没有得到错误,所以我不确定如何诊断这个问题。

这是否与列表元素不是预渲染/静态html,而是使用vue.js注入的事实有关?

https://jsfiddle.net/nolaandy/hw2mheem/

HTML/Vue模板

代码语言:javascript
复制
<div id='app'>   
<div class="all-players-wrapper" id="all-player-listings">
<button id="filter-qb">QB</button>
<ul class="list">

  <li v-for="player in playerJSON">
    <div class="player-listing">
      <div class="player-left">
        <div class="player-name">{{player.firstName}} {{player.lastName}}</div>  
        <div class="playerPosition">{{ player.Position }}</div>
      </div><!-- end player-left -->
      <div class="player-right">
        <div class="player-grade">GRADE <span>{{player.NFLGrade}}</span></div>
      </div> <!--end player-right -->
    </div>
  </li>

</ul>
</div>
</div>

JS

代码语言:javascript
复制
var vm = new Vue({ 
el: '#app',
data: {
status: 'Combine Particpants',
playerJSON: []
},
created: function () {
this.loadData();

},
methods: {
loadData: function () {
 var self = this;      
 axios.get('https://s3-us-west-2.amazonaws.com/s.cdpn.io/500458/tiny.json').then(function (response) {

   self.playerJSON = response.data
   console.log(response.data);
  })
  .catch(function (error) {
    self.status = 'An error occurred - ' + error
  });
  }
 }  
}); 

var options = {
valueNames: [ 'playerPosition' ]
};

var featureList = new List('all-player-listings', options);

$('#filter-qb').click(function() {
  featureList.filter(function(item) {
    if (item.values().playerPosition == "QB") {
    return true;
  } else {
    return false;
  }
});
 return false;
});
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-13 04:24:18

正如您所怀疑的那样,如果DOM发生不可预测的更改,List.js将无法正常工作。在这种情况下,axios在将(空)列表读入featureList之后调用并填充数据。

如果您将列表选择和过滤代码放在axios调用的解析中,那么您的示例可以工作,但这不是一个在真正动态环境中工作的解决方案。

每次DOM更新时都会调用custom directive,因此您可以一致地应用您的调整。下面是一个使用List.js应用过滤器的指令:

代码语言:javascript
复制
  directives: {
    filteredList(el, binding) {
      if (binding.value) {
        const options = {
          valueNames: ['playerPosition']
        };
        const featureList = new List(el, options);

        featureList.filter((item) => item.values().playerPosition === binding.value);
      }
    }
  }

像这样应用它:

代码语言:javascript
复制
<div class="all-players-wrapper" v-filtered-list="filterValue">

添加filterValue数据项,并使用按钮对其进行设置:

代码语言:javascript
复制
<button id="filter-qb" @click="() => filterValue='QB'">QB</button>

你就可以开始做生意了。

值得注意的是,您可以通过使用computed过滤数据来获得相同的效果,并且不需要外部库。

Updated fiddle

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48754505

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档