vue.js 利用SocketCluster实现动态添加数据及排序

时间:2022-09-03 10:19:07

直接上代码

html:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="js/vue.js"></script> <script src="../折叠菜单插件/3/js/jquery.min.js"></script> <script src="js/socketcluster.js"></script>
<script src="js/app.js"></script>
<link rel="stylesheet" href="css/style.css">
</head>
<body>
<!--<ul id="example-1">-->
<!--<li v-for="item in items">-->
<!--{{ item.type }}-->
<!--</li>-->
<!--</ul>--> <div style="position:fixed; top:0px;left: 0px;" >
<ul id="example-1"> <li class="block" v-for="data in items | orderBy 'count' -1" >
<input type="checkbox" name="item" id="{{ data.type }}" checked="checked" />
<label for="{{ data.type }}"><i aria-hidden="true" class="icon-users"></i> {{ data.type }} <span>{{ data.count }}</span></label>
<ul class="options">
<li v-for="s_data in data.small_type| orderBy 'count' -1">
<a href="#">
<i aria-hidden="true" class="icon-search"></i> {{ data.type }}——{{s_data.count}}
</a>
</li>
<!--<li><a href="#"><i aria-hidden="true" class="icon-point-right"></i> Poke A Friend</a></li>-->
<!--<li><a href="#"><i aria-hidden="true" class="icon-fire"></i> Incinerate Existing Friends</a></li>-->
</ul>
</li> </ul>
</div> </body>
</html>

  

/**
* Created by Administrator on 2016/11/4.
*/
$(function () { var socket = socketCluster.connect( {
port: 8000,
hostname: "193.168.15.205",
// path: '/public',
secure: false
});
var sub = socket.subscribe('attack_data');
var datas=[];
sub.watch(function (data) {
var $type=JSON.parse(data).data.type;
console.log($type);
var $is_cunzai=false; for(var i=0;i<datas.length;i++){ var model=datas[i];
if(model.type==$type){
datas.splice(i,1,{
type:$type,
count:model.count+1,
small_type:[{
type:"测试分类1",
count:30+model.count+1,
},{
type:"测试分类2",
count:50+model.count+1,
},{
type:"测试分类3",
count:90+model.count+1,
}
]
});
$is_cunzai=true;
break;
}
}
if(!$is_cunzai){
datas.push({
type:$type,
count:1,
small_type:[{
type:"测试分类1",
count:30,
},{
type:"测试分类2",
count:50,
},{
type:"测试分类3",
count:90,
}
]
});
} });
var example1 = new Vue({
el: '#example-1',
data: {
items: datas
}
});
});