2013-08-05 3 views
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) { 
     // 
    } 
} 

Завод cordovaReady выполнит переданную функцию обратного вызова, когда событие deviceReady был уволен. Мой вопрос: как я могу использовать его в контроллере?

Я попытался с помощью только

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

Но это не сработало. Нет ошибок консоли. Есть идеи?

+0

Что делает ваш контроллер выглядеть? – maxdec

+0

@maxdec только что обновил мой вопрос –

+0

"не работал"? Есть ли сообщения об ошибках в консоли, вы пытались отслеживать выполнение с помощью devtools/firebug? Может быть, это проблема минимизации, так как вы не используете удобную форму определения контроллера? – pinoyyid

ответ

2

Я решил его обертывание фактора, как этого

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

Вы уверены, что ваша зависимость вводится в ваш контроллер?

var MyController = function($scope, cordovaReady) { 
    ... 
} 
MyController.$inject = ['$scope', 'cordovaReady']; 
2

лучшей версию @artworkad:

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

Не забывайте вводить зависимости явным образом в противном случае вы будете иметь проблемы, когда уменьшая этот фрагмент.

0

В контроллере вы должны объявить функцию использовать cordovaReady

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

    var initApp= cordovaReady(function() { 

     //do something 
    }); 
    initApp(); 
}]); 
Смежные вопросы