angularjs推迟然后只调用一次

时间:2013-03-05 18:48:16

标签: javascript angularjs

我正在使用窗口对象和延迟,以便将一些内容注入我的控制器中,这在创建它时是不可用的。我第一次调用它时工作正常 - .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;
});

这是一种模仿我正在做但不完全正确的事。它会引发有关已在进行中的应用的错误,但是再次,我得到了很多并经常忽略它们fiddle

2 个答案:

答案 0 :(得分: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 :(得分:0)

我遇到了同样的问题,我每次都通过定义来修复它,我想你会是这样的:

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