2017-02-10 21 views
1

我有下面的代碼,我可以在哪裏從相機拍攝圖像或從圖庫中選擇它並將圖像路徑保存在sqlite上,然後顯示它,當我嘗試刪除圖像時,一切正常它刪除所有的圖像。 如何單獨選擇每個圖像,然後按id或索引刪除它。AngularJS ionic從Sqlite中刪除所選圖像

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> 

回答

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> 
+0

不起作用,我以前試過 –

+0

我需要先獲取一個img id,然後才能del它應 –

+0

它應該工作,調試它,並檢查ID是否存在'刪除'功能 –

0

我的問題我用的是NG重複範圍:( 新手錯誤

外刪除功能
+0

那麼你應該接受我的回答:) –

+0

完成............... –

+0

哈哈感謝兄弟:) –