如何使用angularjs更新visjs的节点或边缘属性?

8 html javascript angularjs angularjs-directive vis.js

我需要根据某些数据隐藏或取消隐藏某些节点和边缘.我可以通过遍历visjs的数据来实现它,但每次隐藏或取消隐藏时都会触发稳定(这会覆盖现有数据).

我发现这个例子中,其添加,更新和通过直接更改删除一个节点nodes通过使用值add,updateremove功能.这会动态地执行这些操作而不会稳定,但是当我在AngularJS中尝试相同的操作时,我遇到以下错误

org_nodes.update不是一个函数

从此示例的源代码中获取的代码段

function addNode() {
    var newId = (Math.random() * 1e7).toString(32);
    nodes.add({id:newId, label:"I'm new!"});
    nodeIds.push(newId);
}

function changeNode1() {
    var newColor = '#' + Math.floor((Math.random() * 255 * 255 * 255)).toString(16);
    nodes.update([{id:1, color:{background:newColor}}]);
}

function removeRandomNode() {
    var randomNodeId = nodeIds[Math.floor(Math.random() * nodeIds.length)];
    nodes.remove({id:randomNodeId});

    var index = nodeIds.indexOf(randomNodeId);
    nodeIds.splice(index,1);
}
Run Code Online (Sandbox Code Playgroud)

看看我的plunker,它证明了这一点.我在这里失踪的是什么?注意 - 我正在使用angular-visjs

scn*_*iro 3

您打电话时似乎有点不对劲update。参考该示例,该update函数需要传递一个参数,该参数是new vis.DataSet. 相反,您提供一个简单的数组。我们可以通过几种方式来解决这个问题,但是让我们在声明时进行$scope.data更改

$scope.data = {
    nodes: new vis.DataSet(org_nodes),
    edges: edges
};
Run Code Online (Sandbox Code Playgroud)

现在我们已经做到了这一点,$scope.agentClicked让我们修改我们的调用以引用我们的vis.DataSet对象

$scope.agentClicked = function() {
    $scope.data.nodes.update([ ... ]);
}
Run Code Online (Sandbox Code Playgroud)

Plunker Link - 更新的演示