Vuejs关于过滤器的问题
var kinds = [
{"id":"1"},
{"id":"2",},
{"id":"3",},
{"id":"4",}
]
var list = [
{"pid":"1",},
{"pid":"1",},
{"pid":"2",},
{"pid":"2",},
{"pid":"3",},
{"pid":"3",},
{"pid":"4",},
{"pid":"4",}
]
<script id="menuList" type="text/template">
<%_.each(kinds, function(pitem) {%>
<div class="mOrder-menu-con-item">
<h1><%=pitem.id%></h1>
<ul>
<%_.each(list, function(sitem) { if(sitem.pid == pitem.id) {%>
<li>
<%=sitem.id%>
</li>
<%}});%>
</ul>
</div>
<%});%>
</script>
如上,underscore可以在模板上写一些逻辑来做到根据
kinds
数组的id来过滤一部分
list
数组。
我尝试用Vuejs的过滤器实现上面这个过滤:
<ul id="demo">
<li v-repeat="kinds:kinds">
id:{{kinds.id}}
<div v-repeat="list:list | isInParent pid kinds.id">
<span>{{ list.pid }}{{kinds.id}}</span>
</div>
</li>
</ul>
<script>
var kinds = [
{"id":"1",},
{"id":"2",},
{"id":"3",},
{"id":"4",}
]
var list = [
{"pid":"1",},
{"pid":"1",},
{"pid":"2",},
{"pid":"2",},
{"pid":"3",},
{"pid":"3",},
{"pid":"4",},
{"pid":"4",}
]
Vue.filter('isInParent', function (arr,value,pValue) {
var array = []
console.log(pValue)
arr.forEach(
function (obj,index) {
if (obj[value] == pValue){
array.push(arr[index])
}
}
)
return array;
})
var demo = new Vue({
el: '#demo',
data: {
kinds: kinds,
list: list
}
})
</script>
Vuejs的只能传递字符串给过滤器 --
"list:list | isInParent pid kinds.id"
,无法传递repeat中的
kinds.id
的值。
想请问使用Vuejs如何实现underscore这种过滤。
isod3
10 years ago
Answers
谢邀。特地去学了underscore和vuejs(笑)。
大片代码可以用jsfiddle来表达,可以直接显示出来。
具体看下面的执行代码。
http://jsfiddle.net/dxxdkn2p/1/
你要的是这个嘛?
PS:~~我觉得filter主要是给一个值做转化用的,而不是做过滤的,像是日期格式化啦,单词变大写啦。~~有没有考虑用lodash替换underscore?
UPDATE
这样呢?
http://jsfiddle.net/dxxdkn2p/3/
UPDATE2
在看完源码之后,我感觉到
这是一个坑,这绝对是一个坑(╯‵□′)╯︵┻━┻
你当我没说上面那句话。
http://jsfiddle.net/dxxdkn2p/7/
cicivan
answered 10 years ago