2016-09-09 1 views
0

동일한 배열을 가리키는 nodes이라는 속성을 할당하려는 Anuglar 서비스 안에 2 개의 개체가 있습니다. 이것을 올바른 방법일까요? 나는 내가 objectTwo.nodes[i]를 변경하면 다른 지금두 개의 별도 자바 스크립트 개체의 속성이 연결되도록하는 방법

objectOne.nodes = [o1, o2, o3]; 
objectTwo.nodes = []; 
angular.forEach(objectOne.nodes, function(n){ 
    objectTwo.nodes.push(n); // based on some logic not all n assigned to the objectTwo, some might go to objectThree. 
}) 

을 변화 한 개체의 노드에 대한 변경 사항을 구성하는 때보고 있지 않다, 나는 i와 j는 인덱스 곳이 objectOne.nodes[j] 신청을 기대합니다 두 개의 서로 다른 객체에있는 동일한 노드 (순서가 맞지 않을 수 있기 때문에)에 대해, 그러나 나는 이것을 보지 않을 것이다. 노드를 objectTwo에 넣을 때 잘못된 것을하고 있습니까?

추신 : 나는 DOM에서 objectTwo 노드로 변경하고 있으며, objectOne과 ObjectTwo는 모두 내 서비스의 mem 변수에 있습니다.

+0

왜 당신은 그냥하지 않을 것이다 - objectTwo.nodes = objectOne.nodes, 그런 식으로 당신이 그것을 통과 참조에 의해 – naortor

+0

아니요, 어떤 노드가 objectTwo 또는 objectThree 또는 o로 이동할지 선택하는 로직을 사용하고 싶습니다. bjectFour, 등등 ... – rex

+0

하나의 객체에서 다른 객체가 변경되는 노드를 변경합니다. '$ scope. $ watch'를 참조하고 있다고 가정합니까? 콜백 함수는'angular.forEach'와 유사합니다. – CozyAzure

답변

0

개체의 동일한 참조를 푸시면 새 배열이 원본에도 영향을 주어야합니다.

var objectOne = {}, objectTwo = {}, objectThree = {}; 
 

 
objectOne.nodes = [{ id: 1, name: 'o1' }, { id: 2, name: 'o2' }, { id: 3, name: 'o3' }]; 
 
objectTwo.nodes = []; 
 
objectThree.nodes = []; 
 

 
objectOne.nodes.forEach(function (o) { 
 
    o.id % 2 ? objectTwo.nodes.push(o) : objectThree.nodes.push(o); 
 
}); 
 

 
objectTwo.nodes[1].name += '+'; 
 

 
console.log(objectOne); 
 
console.log(objectTwo); 
 
console.log(objectThree);
.as-console-wrapper { max-height: 100% !important; top: 0; }

+0

Nanka THanks 이것이 내가 기대하는 바지만 불행히도 그것을보고 있지 않습니다. angular.forEach() 또는 라이브러리에서 사용하는 (handsontable) DOM을 노드에 바인딩하는 방식 때문일 것이라고 생각하십니까? – rex

+0

dom 요소가 일반 객체처럼 작동하지 않는다고 가정합니다. 이 경우 ID와 같은 참조를 수집 할 것입니다. 그리고 변경을 위해 참조를 사용하고 참조가 가리키는 일부 DOM 변경을 수행합니다. –

+0

DOM을 변경하면 확실히 objectTwo가 업데이트되지만 objectOne에 전파되지 않습니다 – rex

0

좀 도와 :

var div = document.createElement("div"); 
 
var a = {}, b = {}; 
 
a.nodes = b.nodes = []; 
 
a.nodes.push(div); 
 
div.style.color = "blue"; 
 
console.log(a.nodes[0].style.color); 
 
console.log(b.nodes[0].style.color); 
 
div.style.color = "red"; 
 
console.log(a.nodes[0].style.color); 
 
console.log(b.nodes[0].style.color);

+0

다른 객체간에 노드 요소를 분할해야하므로이 솔루션은 제 경우에는 적용되지 않습니다. – rex

+0

@ armensg90 나는 이해하지 못한다 : - | – leaf

+0

아마도 내가 틀렸어. objectOne에 이미 정의 된 노드 배열 솔루션을 사용할 수 있습니까? – rex