4

工厂:

factory('cordovaReady', function () {
    return function (fn) {

        var queue = [];

        var impl = function () {
            queue.push(Array.prototype.slice.call(arguments));
        };

        document.addEventListener('deviceready', function () {
            queue.forEach(function (args) {
                fn.apply(this, args);
            });
            impl = fn;
        }, false);

        return function () {
            return impl.apply(this, arguments);
        };
    };
})

我在另一家工厂使用了这个工厂,如下所示:

return {
    getCurrentPosition: cordovaReady(function (onSuccess, onError, options) {
        //
    }
}

当触发 deviceReady 事件时,cordovaReady 工厂将执行传递的回调。我的问题是如何在控制器中使用它?

我试过了

.controller( 'HomeCtrl', function HomeController($scope, cordovaReady) {   
  cordovaReady(function(){
        //do stuff
  });   
}); 

但它没有用。没有控制台错误。有任何想法吗?

4

4 回答 4

2

@artworkad 的更好版本:

.factory('aUseCase', ['$q', '$rootScope', 'cordovaReady', function ($q, $rootScope, cordovaReady) {
    return {
        doSomething: cordovaReady(function () {
            //do stuff
        })
    };
}])

不要忘记显式注入依赖项,否则在缩小此代码段时会遇到问题。

于 2013-08-15T15:03:20.280 回答
2

我通过像这样包装因子来解决它

.factory('aUseCase', function ($q, $rootScope, cordovaReady) {
    return {
        doSomething: cordovaReady(function () {
            //do stuff
        })
    };
})
于 2013-08-12T16:46:20.633 回答
0

你确定你的依赖被注入你的控制器吗?

var MyController = function($scope, cordovaReady) {
  ...
}
MyController.$inject = ['$scope', 'cordovaReady'];
于 2013-08-05T10:46:42.677 回答
0

在控制器中,您需要声明一个函数以使用 cordovaReady

myApp.controller("salaryCalculatorCtr", ['$scope', 'cordovaReady'
, function ($scope, cordovaReady) {

    var initApp= cordovaReady(function () {

       //do something
    });
    initApp();
}]);
于 2015-04-11T13:33:14.410 回答