AngularJS ionic从Sqlite中删除所选图像

时间:2017-02-10 15:27:27

标签: angularjs sqlite cordova ionic-framework

我在下面有这个代码,我可以从相机中取出图像或从图库中选择它并在sqlite上保存图像路径然后显示它,当我尝试删除图像时,一切都很好用,它会删除所有图像。 如何单独选择每个图像,然后按id或索引删除它。

var db = null;
angular.module('starter', ['ionic', 'ngCordova']) 
    .run(function($ionicPlatform, $cordovaSQLite) {    
        $ionicPlatform.ready(function() {      
            try {        
                db = $cordovaSQLite.openDB({          
                    name: "my.db",
                              location: 'default'        
                });        
                $cordovaSQLite.execute(db,"CREATE TABLE IF NOT EXISTS imageTable " + "(id integer primary key, image text)");      
            } catch (e) {        
                alert(e);      
            } finally {       }

            if (window.cordova && window.cordova.plugins.Keyboard) {

                cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);


                cordova.plugins.Keyboard.disableScroll(true);
            }
            if (window.StatusBar) {
                StatusBar.styleDefault();
            }
        });
    })



    .controller('ImageCtrl', function($scope, $rootScope, $state, $stateParams, $cordovaDevice, $cordovaFile, $ionicActionSheet, $cordovaCamera, $cordovaFile, $cordovaDevice, $ionicPopup, $cordovaActionSheet, $cordovaSQLite, $interval) {




        var imagesP = [];

        //$scope.images = [];


        $scope.showAlert = function(title, msg) {
            var alertPopup = $ionicPopup.alert({
                title: title,
                template: msg
            });
        };


        $scope.loadImage = function() {

            var options = {
                title: 'Select Receipts Image ',
                buttonLabels: ['Gallery', 'Take photo', 'File System'],
                addCancelButtonWithLabel: 'Cancel',
                androidEnableCancelButton: true,
            };
            $cordovaActionSheet.show(options).then(function(btnIndex) {
                var type = null;
                if (btnIndex === 1) {
                    type = Camera.PictureSourceType.PHOTOLIBRARY;
                } else if (btnIndex === 2) {
                    type = Camera.PictureSourceType.CAMERA;
                }
                if (type !== null) {
                    $scope.selectPicture(type);
                }
            });
        }




        // Take image with the camera or from library and store it inside the app folder
        // Image will not be saved to users Library.
        $scope.selectPicture = function(sourceType) {


            var options = {
                quality: 75,
                destinationType: Camera.DestinationType.FILE_URI,
                sourceType: sourceType,
                allowEdit: true,
                encodingType: Camera.EncodingType.JPEG,
                correctOrientation: true,
                targetWidth: 800,
                targetHeight: 800,
                popoverOptions: CameraPopoverOptions, // for IOS and IPAD
                saveToPhotoAlbum: false
            };

            $cordovaCamera.getPicture(options).then(function(imagePath) {
                    // Grab the file name of the photo in the temporary directory
                    var currentName = imagePath.replace(/^.*[\\\/]/, '');
                    //  alert(currentName);

                    //Create a new name for the photo to avoid duplication
                    var d = new Date(),
                        n = d.getTime(),
                        newFileName = n + ".jpg";
                    //alert(newFileName);
                    // If you are trying to load image from the gallery on Android we need special treatment!
                    if ($cordovaDevice.getPlatform() == 'Android' && sourceType === Camera.PictureSourceType.PHOTOLIBRARY) {
                        window.FilePath.resolveNativePath(imagePath, function(entry) {
                            window.resolveLocalFileSystemURL(entry, success, fail);

                            function fail(e) {
                                console.error('Error: ', e);
                            }

                            function success(fileEntry) {
                                var namePath = fileEntry.nativeURL.substr(0, fileEntry.nativeURL.lastIndexOf('/') + 1);
                                // Only copy because of access rights
                                $cordovaFile.copyFile(namePath, fileEntry.name, cordova.file.dataDirectory, newFileName).then(function(success) {
                                    //  $scope.image = newFileName;
                                    var imgPath = cordova.file.dataDirectory + newFileName;

                                    $scope.add(imgPath);




                                }, function(error) {
                                    $scope.showAlert('Error', error.exception);
                                });
                                //      alert( fileEntry.nativeURL);

                            };
                        });
                    } else {
                        var namePath = imagePath.substr(0, imagePath.lastIndexOf('/') + 1);
                        // Move the file to permanent storage
                        $cordovaFile.moveFile(namePath, currentName, cordova.file.dataDirectory, newFileName).then(function(success) {
                            // $scope.image = newFileName;
                            //$scope.images.push(newFileName);
                                    var imgPath = cordova.file.dataDirectory + newFileName;
                            $scope.add(imgPath);




                        }, function(error) {
                            $scope.showAlert('Error', error.exception);
                        });

                    }
                },
                function(err) {
                    // Not always an error, maybe cancel was pressed...
                })
        };

        $scope.add = function(path) {             
                if (imagesP != null) {          
                    $cordovaSQLite.execute(db, "INSERT INTO imageTable (images) VALUES(?)", [path] );        
                }        
                alert("Inserted.");      
            },
            function(e) {        
                alert(e);      
            };

        $scope.delete = function(id) {                
                if (id != '') {          
                    $cordovaSQLite.execute(db, "DELETE FROM imageTable WHERE id=?", [id]);        
                }        
                alert("Deleted.");        
                $scope.ShowAllData();      
            },
            function(e) {        
                alert(e);      
            };    

          
        $scope.ShowAllData = function() {     
            $scope.images = [];      
            $cordovaSQLite.execute(db,"SELECT images FROM imageTable").then(function(res) {          
                if (res.rows.length > 0) {            
                    for (var i = 0; i < res.rows.length; i++) {              
                        $scope.images.push({                
                            id: res.rows.item(i).id,
                            image: res.rows.item(i).images

                                          
                        });            
                    }          
                }        
            },         function(error) {          
                alert(error);        
            }      );

             
            return $scope.images;    
        } 
        //$scope.ShowAllData();
         
        //$interval($scope.ShowAllData, 2000,1);
               




        // Returns the local path inside the app for an image
        $scope.pathForImage = function() {

            return cordova.file.dataDirectory + $scope.ShowAllData();



        };

    });

HTML

<body ng-app="starter" ng-controller="ImageCtrl">
    <ion-pane>
        <ion-header-bar class="bar-positive">
            <h1 class="title"> Image Upload</h1>
        </ion-header-bar>
        <ion-content ng-repeat="image in images track by index">
            <img ng-src="{{image.image}}" style="width: 100%; height: 100%;">
        </ion-content>
        <ion-footer-bar class="bar bar-positive">
            <div class="button-bar">
                <button class="button icon-left ion-camera" ng-click="loadImage()">Take Photo</button>
                <button class="button icon-left ion-camera" ng-click="ShowAllData()">show Photo</button>
    <button class="button icon-left ion-camera" ng-click="delete($index,image.id)">Delete Photo</button>



            </div>
        </ion-footer-bar>
    </ion-pane>
</body>

2 个答案:

答案 0 :(得分:1)

试试这段代码,希望这会有用

<body ng-app="starter" ng-controller="ImageCtrl">
    <ion-pane>
        <ion-header-bar class="bar-positive">
            <h1 class="title"> Image Upload</h1>
        </ion-header-bar>
        <ion-content ng-repeat="image in images track by index">
            <img ng-src="{{image.image}}" style="width: 100%; height: 100%;">
            <button class="button icon-left ion-camera" ng-click="delete(image.id)">Delete Photo</button>   
        </ion-content>
        <ion-footer-bar class="bar bar-positive">
            <div class="button-bar">
                <button class="button icon-left ion-camera" ng-click="loadImage()">Take Photo</button>
                <button class="button icon-left ion-camera" ng-click="ShowAllData()">show Photo</button>
            </div>
        </ion-footer-bar>
    </ion-pane>
</body>

答案 1 :(得分:0)

我的问题我在ng-repeat范围之外使用删除功能:( 新手的错误