对.value()有一个理解问题,并在控制器中使用它... 在以下示例中,声明services.js中的.value():
.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;
}])
最后,debug返回scanData,或者allocateDatas(实际上不知道是什么)未定义...
有任何想法或建议吗?
THX
答案 0 :(得分:0)
您的ScanDatas
值是一个scanData
字段的对象。在您的服务和控制器中,您将其注入ScanDatas
,但您没有在任何地方引用它?
尝试例如:
scan.getBarcodeData = function(){
return ScanDatas.scanData;
};
答案 1 :(得分: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
进行值配方的incorect引用,而使用colectedData
进行未定义的另一个引用。
同样在这里你有一个不好的参考,因为@Joppe在他的回答中表示:
scan.getBarcodeData = function(){
// return scanData; nope
return ScanDatas.scanData; // sure
};