2016-07-01 3 views
0

한 구성 요소의 변경으로 트리의 다른 위치에서 다른 구성 요소의 내용이 변경되는 방식으로 1.5 각형 구성 요소를 사용하는 몇 가지 솔루션을 찾고 있습니다. 무엇이 가장 좋은 해결책이라고 생각하십니까? rootScope? redux? 이벤트? 일부 다른 전역 변수?각도 1 구성 요소 간의 관계를 만드는 방법은 무엇입니까?

+0

'require' 속성에 대한 객체 매핑을 제공함으로써 다른 컴포넌트 사이의 통신을 가능하게 할 수 있습니다. 'require : {otherCtrl : '^ other'}, – Erevald

답변

1

당신이 REDUX 또는 다른 것없이 자신의 서비스를 원하는 경우에, 당신은 같은 서비스를 구현할 수 있습니다 : 예를 들어

angular.module("my_service", []) 
    .factory("Message", function() { 
    var messages = { 
    // m1: [], 
    // m2: [] 
    }; 

    function receive(message, messageHandler) { 
     if (!Array.isArray(messages[message])) { 
     messages[message] = []; 
     } 
     messages[message].push(messageHandler); 
    } 

    function send(messageName, message) { 
     if (Array.isArray(messages[messageName])) { 
     messages[messageName].forEach(function(messageHandler) { 
      messageHandler(message); 
     }); 
     } else { 
     console.warn("sent message", message, "is not in the message list..."); 
     } 
    } 

    return { 
     send: send, 
     receive: receive 
    }; 
    } 
}); 

그리고 만들 수있는 다른 곳에서 두 개의 컨트롤러 : 기본적으로

angular.module("app", ["my_service"]) 
.controller("app1", function(Message) { 
    Message.receive("sthHappened", function(whatHappened) { 
    console.log("app1 says :", whatHappened); 
    }); 
}) 
.controller("app2", function(Message) { 
    Message.send("sthHappened", "app2 initiated"); 
}); 

을 메시지를 받았을 때 실행하기위한 기능을 등록하고 등록 된 기능을 실행하기 위해 어떤 일이 발생했을 때 트리거를 등록합니다. 순차 실행을 중단하기 위해 필요한 항목에 따라 몇 가지 추가 작업을 수행하고 성능 또는 비동기 op를 개선해야하지만이 작업은 컨트롤러간에 메시징 채널을 생성하기위한 게시자 - 구독자 메커니즘의 기본 구조입니다. 지시문 또는 기능을 포함 할 수 있습니다.

관련 문제