2016-07-01 18 views
0

私はいくつかのソリューションを探しています1つのコンポーネントの変更は、ツリー内の別の場所にある他のコンポーネントの何かを変更する方法で1.5アングルコンポーネントを使用する。 あなたは何が最良の解決策だと思いますか? rootScope? 還元ですか? イベント? 他のグローバル変数?角度1コンポーネント間の関係を作成する方法は?

+0

'require'プロパティのオブジェクトマッピングを提供することによって、他のコンポーネント間の通信を有効にすることができます。 'require:{otherCtrl: '^ other'}、 – Erevald

答えて

1

あなたが再来か何かせずに、独自のサービスをしたい場合は、あなたのようなサービスを実装することができます。たとえば

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"); 
}); 

をメッセージを受信したときに実行する関数を登録し、登録された関数を実行するために何か起きたときにトリガーを登録します。 シーケンシャル実行を中断するには、必要なものに応じていくつかの追加を行い、パフォーマンスや非同期操作を改善する必要があるかもしれませんが、コントローラー間のメッセージングチャネルを作成するためのパブリッシャー/サブスクライバメカニズムの基本的な構造または指示または任意の機能。

関連する問題