2016-07-24 87 views
0

有。價值())在services.js理解問題和在控制器使用它... 在以下示例中,聲明。價值(:AngularJS應用價值服務

.value("ScanDatas",{ 
    scanData: {} 
}) 

認爲一旦定義「SCANDATA」是在整個應用程序可用...在工廠使用它:

.factory("ScanService", ["ScanDatas","$cordovaBarcodeScanner", function (ScanDatas,$cordovaBarcodeScanner) { 
var scan = {}; 

scan.scanBarCode = function(){ 
    $cordovaBarcodeScanner.scan().then(function(datas){ 
     scanData.collectedDatas.text = datas.text; 
     scanData.collectedDatas.format = datas.format; 
     scanData.collectedDatas.cancelled = datas.cancelled; 
    },function(error){ 
     scanData.collectedDatas.error = error; 
    }) 
} 

scan.getBarcodeData = function(){ 
    return scanData; 
}; 

return scan; 
}]) 

然後希望在一個控制器來使用結果:

.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 

    var barcodeData = {}; // Données lues à partir du lecteur de code barre 

    $scope.scanBarCode = function(){ 
     ScanService.scanBarCode(); 
    }; 

    //barcodeData = ScanService.getBarcodeData(); 
    $scope.add.ean = scanData.collectedDatas.text; 


}]) 

最後,調試返回scanData或收集的數據(不知道是什麼)未定義...

任何想法或建議?

THX

回答

0

ScanDatas值是與場scanData的對象。在您的服務和控制器中,您已將其注入爲ScanDatas,但您沒有在任何地方引用它?

嘗試例如:

scan.getBarcodeData = function(){ 
    return ScanDatas.scanData; 
}; 
+0

THX ...學習AngularJS是不容易,因爲我能想到......現在,探索承諾等來完成我的應用程序...也許有一個新的問題,如何推遲我的掃描方法填充視圖中的字段 –

0

必須通過它引用中使用的值配方的已定義的名稱:

scan.scanBarCode = function(){ 
    $cordovaBarcodeScanner.scan().then(function(datas){ 
     // You must also initialize the object that references collectedData before using it 
     ScanDatas.scanData.collectedDatas = {}; 
     ScanDatas.scanData.collectedDatas.text = datas.text; 
     ScanDatas.scanData.collectedDatas.format = datas.format; 
     ScanDatas.scanData.collectedDatas.cancelled = datas.cancelled; 

} 

所以,你必須有兩個錯誤。如果沒有用空對象初始化,那麼通過scanData而不是ScanDatas.scanData而另一個colectedData未被定義的情況下,其中一個值爲scanData的incorect引用。

而且在這裏你有一個壞引用作爲@Joppe顯示,他的回答:

scan.getBarcodeData = function(){ 
    // return scanData; nope 
    return ScanDatas.scanData; // sure 
};