AngularJS клик-сервис и обещание

0

Я всегда начинаю в AngularJS и имею проблемы с проблемами... То, что я хочу сделать, почти прост:

кнопка в представлении, которая запускает сканирование штрих-кода и после завершения сканирования заполняет поля просмотра результатом сканирования...

Я делаю следующее...

В представлении:

<button id="ajouter-button3" class=" button button-positive  button-block " ng-click="scanBarCode()">Scanner</button>

И позже в представлении:

        <label class="item item-input " id="add-ean" name="ean">
            <span class="input-label">EAN</span>
            <input type="text" placeholder="Code EAN" name="add.ean" ng-model="add.ean" value="{{add.ean}}">
        </label>

Место в контроллере:

    .controller("ajouterCtrl", ["$scope", "$ionicPopup", "$timeout", "ScanDatas", "ScanService" , "storageAreaService", function ($scope, $ionicPopup, $timeout, ScanDatas, ScanService, storageAreaService) {
    "use strict";
    $scope.storageAreas = storageAreaService.storageAreaList();
    $scope.add = {}; // Initalise l'objet


    $scope.scanBarCode = function(){
        ScanService.getBarcodeData().then(function(datas){
            console.log("Retour de la méthode d'acquisition");
            $scope.add.ean = datas.text;
        })
    };

}])

И в services.js, хочу отложить, чтобы получить обещание после завершения сканирования, но... я не понимаю, как работают отсрочки/обещания/функции, попробуйте следующее:

.factory("ScanService", ["$ q", "ScanDatas", "$ cordovaBarcodeScanner", функция ($ q, ScanDatas, $ cordovaBarcodeScanner) {var scan = {};

var scanBarCode = function(){
    var readDatas = {};

    $cordovaBarcodeScanner.scan().then(function(datas){
        readDatas.text = datas.text;
        readDatas.format = datas.format;
        readDatas.cancelled = datas.cancelled;
        readDatas.processed = true;
    },function(error){
        readDatas.error = true;
    });

    return readDatas;
}

var getBarcodeData = function(){
    var deferred = $q.defer();

    deferred.resolve(scanBarCode());

    return deferred.promise;
};

return {
    getBarcodeData: getBarcodeData
}
}])

Когда я запускаю приложение... журнал запускается немедленно в $ scope.scanBarCode, в то время как я ожидал, что console.log только срабатывает после отложенного. Решает обещание.. Не понимаю, почему это поведение...

JL

Теги:
angular-promise

1 ответ

0
Лучший ответ

используйте это как услугу:

.factory("ScanService", ["$q", "ScanDatas","$cordovaBarcodeScanner", function ($q, ScanDatas, $cordovaBarcodeScanner) {
  var scan = {
    scanBarCode : function(){
      var deferred = $q.defer();
      var readDatas = {};
      $cordovaBarcodeScanner.scan().then(function(datas){
          readDatas.text = datas.text;
          readDatas.format = datas.format;
          readDatas.cancelled = datas.cancelled;
          readDatas.processed = true;
          deferred.resolve(readDatas);
      },function(error){
          readDatas.error = true;
      });

      return deferred.promise;
    }
  };

  return scan;
}]);

и вызовите его из контроллера следующим образом:

$scope.scanBarCode = function(){
    ScanService.scanBarCode().then(function(datas){
        console.log("Retour de la méthode d'acquisition");
        $scope.add.ean = datas.text;
    })
};

Благодарю!

  • 0
    попробуйте этот подход, но при запуске получил: ionic.bundle.js: 25642 Ошибка: [$ injector: undef] Поставщик ScanService должен вернуть значение из метода $ get factory. Думаю, я что-то пропустил
  • 0
    Просто добавьте возвратное сканирование для разрешения предыдущего ...
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню