监视嵌套在传递到角度组件的多个对象中的更新
Watching for updates nested within multiple objects passed into angular component
我有以下角度控制器:
{ id: 1, shape: "rect", label: "Start", class: "in-progress",
subGraph: {
expand: true,
nodes: [
{id: 10, shape: "rect", label: "Sub Process", class: "in-progress",
subGraph: {
expand: true,
nodes: [
{id: 15, label: "Beginning", shape: "rect", class: "default"},
{id: 16, label: "Middle", shape: "rect", class: "error"},
{id: 17, label: "End", shape: "rect", class: "in-progress"}
],
edges: []
}},
{id: 11, shape: "ellipse", label: "Review", class: "error"},
{id: 12, shape: "ellipse", label: "Finalize", class: "default"}
],
edges: [
{from: 10, to: 11, type: "circle", label: "", dashed: false},
{from: 11, to: 12, type: "diamond", label: "", dashed: false}
]
}
}
以下是在自定义组件之外的控制器中进行更新的功能:
// node being updated is passed into the function below
function onNodeUpdated (node) {
for (var y = 0; y < this.nodes.length; y++) {
if (this.nodes[y].id === node.id) {
this.nodes.splice(y, 1, angular.copy(this.nodes[y]));
break;
} else if (this.nodes[y].subGraph) {
for (var x = 0; x < this.nodes[y].subGraph.nodes.length; x++) {
if (this.nodes[y].subGraph.nodes[x].id === node.id) {
this.nodes[y].subGraph.nodes.splice(x, 1, angular.copy(this.nodes[y].subGraph.nodes[x]));
break;
}
}
}
}
};
我将节点传递到我的自定义角度组件中,如下所示:在我的HTML:中
<example nodes="ctrl.nodes" edges="ctrl.edges"></example>
然后在我的组件中,我在我的链接功能中观察这些节点的更新,如下所示:
scope.$watchCollection("ctrl.nodes", function() {
renderGraph();
});
上面观察节点的变化,即节点的不同形状、添加的类或更改的节点标签。检测到后,图形将重新渲染,显示对节点的更改。这适用于顶级节点,即下面id为#1的节点,但不适用于子Graph中的嵌套节点。
我的问题是,我如何才能开始侦听对嵌套边和节点的更改/更新——我的节点中id为1的所有内容。我还没有看到一个行之有效的例子。所有更新都发生在"示例"组件之外。组件内部唯一发生的事情是,新的节点和/或边阵列被传入时,手表被触发
我试过:
scope.$watch("ctrl.nodes", function() {
renderGraph();
}, true);
scope.$watchCollection("ctrl.nodes.subGraph.nodes", function() {
renderGraph();
});
两者都尝试从不调用组件内部的$watch,需要它来重新渲染节点和边更新。重要的一点是,我不知道组件的用户会有多少子图,所以它需要是动态的,以说明"n"个子图级别。这可能吗?感谢
$scope.$watch(
function(){ return ctrl.nodes },
function(newVal, oldVal){
renderGraph();
}, true);
或
$scope.$watch(
function(){ return ctrl.nodes.subGraph.nodes },
function(newVal, oldVal){
renderGraph();
}, true);
此外,如果此代码在示例指令中,则可以绑定到指令中作用域上的数据。
使用这种语法,你几乎可以对任何事情进行观察。即服务等。
相关文章:
- 从knockout.js中的另一个对象更新一个深度结构化的javascript对象
- Meteor使用对象更新集合
- 如何使用不同视图的JSON对象更新angular js中的全局JSON字段
- 流星反应式嵌套对象更新父对象
- 从返回的 MongoDB 对象更新 Angular.js $scoped
- 在节点 JS 中将值从一个对象更新到另一个对象
- 使用循环从另一个对象更新对象
- React未从数组内的对象更新属性
- 可以't使用新对象更新localStorage
- 使用MongoDB,如何使用变量中的对象更新数组中的对象
- 从用PHP脚本创建的json对象更新速度表数据
- mongoDB-使用$set和一个对象更新文档
- 无法使用新数据对象更新Knockout UI
- 通过REST端点用JSON对象更新Mongoose架构
- 变量引用对象的值,但在对象更新时不更新
- 如何使用jq命令行实用程序执行JSON对象更新
- ReactJS皮质对象更新渲染未调用
- 如何使用json对象更新dojo网格
- 使用接收到的对象更新css设置
- 只有一些我的解析对象更新(总是9,但没有更多),当我运行这个javascript解析云代码