2

作成時に使用できないコンテンツをコントローラに挿入するために、ウィンドウ オブジェクトと遅延を使用しています。これは、最初に呼び出したときに正常に機能しています-.thenメソッドは正常に実行されています。しかし、その後に呼び出すと、.then メソッドが起動しません。何が原因でしょうか?

app.factory('fromoutside', function ($window, $q, $rootScope) {
    var deferred = $q.defer();

    $window.injectIntoAngularWorld = function (obj) {
        deferred.resolve(obj);
        $rootScope.$apply();
    };

    return deferred.promise;
});

これは、私がやっていることをシミュレートするフィドルですが、正確ではありません。すでに進行中の適用に関するエラーがスローされますが、繰り返しになりますが、それらを大量に取得し、無視することがよくあります

4

2 に答える 2

4

おそらく、この種のイベントを使用したほうがよいでしょう。

約束は解決されるように作られ、それから彼らは成し遂げられます。つまり、それらは一種のワンショット取引であることを意味します。

これが私が提案しているものです:

//set it up in your run block.
app.run(function($rootScope, $window) {
   $window.foo = function (data) {
        $rootScope.$broadcast('fooCalled', data);
   };
});


//use $on in your controller.
app.controller('MyCtrl', function($scope){ 
   $scope.$on('fooCalled', function(event, data) {
      $scope.fooData = data;
   });
});

これはそれを行うための1つの方法にすぎませんが、機能するはずであり、かなりクリーンです。イベントを聞いて設定するサービスを作成したい場合は、それが可能です。

于 2013-03-05T19:32:38.993 に答える