因为刚开始在不久的将来,Vue公司接触,所有已知的参考实现方法之间的:
1。从服务器获取数据,并为每个项目设置选中的属性
2、计算选定的selectcount数量,如果数量相等的数量和项目的选择,然后选择所有的选择
3,选中每个项目的选中属性设置为true的点,反选举设置为false,
4。当项目的属性改变,每一次,检查的项目真的是放在数组checkedgroups
下面是代码的实现:
/ /选择
数据:函数(){
返回{
SelectItems:{ } / /从服务器得到的数据。
}
},
计算机:{
选择模型绑定
SelectAll:{
获取:函数(){
返回this.selectcount = = this.selectitems.length;
},
设置:函数(值){
this.selectitems.foreach(功能(项目){)
item.checked =价值;
});
返回值;
}
},
选择的数量
SelectCount:{
获取:函数(){
var I=0;
this.selectitems.foreach(功能(项目){)
如果(项目检查){
++;
}
});
还我;
}
},
选定数组
CheckedGroups: {
获取:函数(){
无功checkedgroups = { };
this.selectitems.foreach(功能(项目){)
如果(项目检查){
CheckedGroups.push(项);
}
});
返回checkedgroups;
}
}
}
这种方法使用起来不太方便。首先,它很难重复使用。当你需要使用它,你需要写一次计算,然后所有的,checkedgroups和物品是固定的,不灵活。
所以,在这个项目中,我使用Vue命令来实现所有的功能,指导思想实际上是类似的计算,第一个代码:
出口默认{
检查所有:{
TwoWay:真的,
参数:{ 'checkdata},
绑定(){
如果所有选中的属性的列表是真实的,选择选择框,取消勾选或选择
* /
这个虚拟机。$表(this.params.checkdata(checkdata)= > {
如果(checkdata.every((项)= >项。检查)){
this.set(真的);
{人}
this.set(假);
}
},{深}:真};
},
/ /检查的变化
更新(检查){
如果选中复选框,则所有选中的属性列表为true,或为false。
* /
如果(检查){
这个VM {这个参数。checkdata }。foreach((项)= > {
item.checked =真;
});
{人}
这个VM {这个参数。checkdata }。foreach((项)= > {
item.checked = false;
});
}
},
},
};
呼叫:
{项目。文本}
首先,这种使用的好处:
1。使用方便,在你需要它的地方,写v-check-all指令和检查数据。
2、选择模型和数组名可以用什么名称自定义,选择模型不想打电话叫checkalldata检查就可以了,不想打电话给checkdata阵列也可以称为datafromserver。
在指令中,指定双向是真实的,你可以用this.set(值)设置检查的价值,并使用params,结合教学环节,获得属性值checkdata,数组操作。
使用this.vm获得教学语境,上下文调用监控checkdata美元看变化。如果checkdata是所有选择的,并设置为true,否则为false设置检查。
当指令值(检查)的变化,如果是真的,检查checkdata属性设置为true,否则为false。因此,选择指令完成。
当你选择改变指令,本来想用paramwatchers听checkdata,却发现checkdata变化,不会触发paramwatchers回调,后来看源代码,paramwatchers实际上就是看美元,但是不支持深度检测:
指令。原型。_setupparamwatcher =功能(关键,表达式){
var =;
var = false;
var = unwatch(这个。_scope | |这个虚拟机。$表(表达),功能(Val,oldval){
自我。params {key} = val;
我们处于即时模式,
只有调用参数变化回调 /如果这不是第一次更新。
如果(称为){
VaR CB = self.paramwatchers自我。paramwatchers {key};
如果(CB){
cb.call(自我,Val,oldval);
}
{人}
调用=真;
}
{ }。
直接的:真实的,
用户:假
}(这。_paramunwatchfns);| |(这个。_paramunwatchfns = { }))推(unwatch);
};
总结
以上就是这篇文章的全部内容,有个错误的地方,也请你多多指教。我希望本文的内容能对你有所帮助。