AngularJS使用价值服务

时间:2016-07-24 10:22:01

标签: angularjs angularjs-service

对.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

2 个答案:

答案 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
};