14

これは想像するのはかなり簡単ですが、この問題に対する正しいアプローチについて言及しているリソースは見つかりませんでした。

ある角度モジュールでイベントをブロードキャストし、別の角度モジュールで受信したいと思います。これら 2 つのモジュールは、コード ベースと目的が異なるため、まったく異なります。唯一の共通点は、同じドメインの Web サイトで実行されているという事実です (同じオリジン ポリシーのために重要である可能性があります)。

たとえば、HTML5 のローカル ストレージを介してイベントを同期することで、これが可能であることはわかっています。私はそれを正しく行う方法を知りたいだけです。

4

3 に答える 3

5

私はそれを正しく行う方法を知りたいだけです。

「ちゃんと」はかなり主観的です。「適切に」とは、機能し、理解しやすく、保守しやすいものです。

とは言うものの$window、実行中の 2 つの別々の角度アプリ間で値を渡すために使用しないのはなぜでしょうか?

function persistFoo($scope, $window) {
   //watch window.foo
   $scope.$watch(function (){
      return $window.foo;
   }, function(v) {
      if($scope.foo !== v) {
         $scope.foo = v;
      }
   });

   //watch scope.foo
   $scope.$watch('foo', function(v) {
      if($window.foo !== v) {
         $window.foo = v;
      }
   });
}

//Module 1
app1.controller("MyCtrl1", function($scope, $window) {
  persistFoo($scope, $window);
});

//Module 2
app2.controller("MyCtrl2", function($scope, $window) {
  persistFoo($scope, $window);
});

後続の訪問のためにデータを保持する必要がある場合は、localStorage も機能します。

于 2013-02-28T19:36:39.433 に答える
-1

私は同様の問題についてつまずいた。これは、このような問題を解決する方法を示すプランカーです: http://plnkr.co/edit/uk7ODSbgXfzqw0z6x4EH?p=preview

var app1 = angular.module('App1', []);

app1.controller('App1Controller', function($scope) {

    // use this function to send a value to app2
    var sendText = function(newText) {
        angular.element(document.getElementById('app2')).scope().setText(newText);
    };

    $scope.$watch('text', function(newText) {
        sendText(newText);
    });

    // initial value
    $scope.text = "Some text";
});

/*

 The code above and below do not share any module, service, etc.

*/


var app2 = angular.module('App2', []);
app2.controller('App2Controller', function($scope) {

    // this function will be called from app1 when text changes
    $scope.setText = function(newText){
        $scope.$apply(function() {
            $scope.text = newText;
        });
    };

});
于 2013-04-26T22:25:26.187 に答える