厂:
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) {
//
}
}
cordovaReady工厂将在触发deviceReady事件时执行传递的回调。我的问题是如何在控制器中使用它?
我尝试了
.controller( 'HomeCtrl', function HomeController($scope, cordovaReady) {
cordovaReady(function(){
//do stuff
});
});
但它没有用。没有控制台错误。有什么想法吗?
答案 0 :(得分:2)
我通过包装像这样的因素来解决它
.factory('aUseCase', function ($q, $rootScope, cordovaReady) {
return {
doSomething: cordovaReady(function () {
//do stuff
})
};
})
答案 1 :(得分:2)
更好的@artworkad版本:
.factory('aUseCase', ['$q', '$rootScope', 'cordovaReady', function ($q, $rootScope, cordovaReady) {
return {
doSomething: cordovaReady(function () {
//do stuff
})
};
}])
不要忘记明确注入依赖项,否则在缩小此代码段时会遇到问题。
答案 2 :(得分:0)
你确定你的依赖注入你的控制器吗?
var MyController = function($scope, cordovaReady) {
...
}
MyController.$inject = ['$scope', 'cordovaReady'];
答案 3 :(得分:0)
在控制器中,您需要声明一个函数以使用cordovaReady
myApp.controller("salaryCalculatorCtr", ['$scope', 'cordovaReady'
, function ($scope, cordovaReady) {
var initApp= cordovaReady(function () {
//do something
});
initApp();
}]);