1

I have this code below where can i take an image from camera or select it from gallery and save the image path on sqlite then display it , everything works great execpt when I try to remove the image it remove all the images . How can I select each image individually then delete it by id or index .

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 Answers 2

1

Try this code, hope this will work

<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>
Sign up to request clarification or add additional context in comments.

5 Comments

I need to get an img id first , then be able to delete it
it should work, debug it and check if id is there in delete function
it deletes everything , i need to delete each image alone
I debuged, it says id undefined
My issue i was using the delete function outside the ng-repeat scope :( newbie mistake I marked your question right
0

My issue i was using the delete function outside the ng-repeat scope :( newbie mistake

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.