2016-02-25 4 views
1

Это мой контроллер, я пытаюсь захватить изображение с помощью кнопки на странице 1 и хранить его локально и отображать image1 на странице 1, а затем, если я щелкнул кнопку снова, чтобы взять рис изображения2. Image2 должны отображаться в стр.1 и image1 следует рассматривать в page2

.controller('LeadDetailController', [ 
      '$scope', 
      '$cordovaDevice', 
      '$cordovaFile', 
      '$ionicPlatform', 
      'ImageService', 'FileService', 
function( $scope, 
      $cordovaDevice, 
      $cordovaFile, 
      $ionicPlatform, 
      ImageService, FileService) { 
// image capture code 
    $ionicPlatform.ready(function() { 
     console.log('ionic is ready'); 
     $scope.images = FileService.images(); 
     $scope.$apply(); 
    }); 

    $scope.urlForImage = function(imageName) { 
     var trueOrigin = cordova.file.dataDirectory + imageName; 
     return trueOrigin; 
    } 

    $scope.addImage = function(type) { 
     ImageService.handleMediaDialog(type).then(function() { 
      $scope.$apply(); 
     }); 
    } 

на самом начальном этапе я получаю эту ошибку

Error: [$rootScope:inprog] $digest already in progress

стр.1 с кнопками

// here camera function is called to open the camera and take pic 
<ion-option-button ng-click="addImage()"class="icon ion-android-camera"></ion-option-button> 
//here the pic taken in camera should be displayed 
<ion-option-button> 
     <img src="">  
</ion-option-button> 
//here moveing to the next page2 
<ion-option-button ng-click="Page2()" class="icon ion-ios-grid-view"></ion-option-button> 

стр.2 HTML

<ion-view> 
    <ion-nav-bar class="bar-positive"> 
     <ion-nav-title class="title">Grid View</ion-nav-title> 
    </ion-nav-bar> 
    <ion-content class="has-header"> 
     <img ng-repeat="image in images" ng-src="{{image.src}}" ng-click="showImages($index)" style="height:50%; width:50%; padding:2px "> 
    </ion-content> 
</ion-view> 

стр.2 контроллер

.controller('gridController', function($scope, $ionicBackdrop, $ionicModal, $ionicSlideBoxDelegate, $ionicScrollDelegate) { 
//here the images are stored inside the array 
     $scope.images = [{ }]; 

услуги

.factory('FileService', function() { 
    var images; 
    var IMAGE_STORAGE_KEY = 'images'; 

    function getImages() { 
    var img = window.localStorage.getItem(IMAGE_STORAGE_KEY); 
    if (img) { 
     images = JSON.parse(img); 
    } else { 
     images = []; 
    } 
    return images; 
    }; 

    function addImage(img) { 
    images.push(img); 
    window.localStorage.setItem(IMAGE_STORAGE_KEY, JSON.stringify(images)); 
    }; 

    return { 
    storeImage: addImage, 
    images: getImages 
    } 
}) 



.factory('ImageService', function($cordovaCamera, FileService, $q, $cordovaFile) { 

    function makeid() { 
    var text = ''; 
    var possible = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'; 

    for (var i = 0; i < 5; i++) { 
     text += possible.charAt(Math.floor(Math.random() * possible.length)); 
    } 
    return text; 
    }; 

    function optionsForType(type) { 
    var source; 
    /* switch (type) { 
     case 0: 
     source = Camera.PictureSourceType.CAMERA; 
     break; 
     case 1: 
     source = Camera.PictureSourceType.PHOTOLIBRARY; 
     break; 
    }*/ 
    return { 
     destinationType: Camera.DestinationType.FILE_URI, 
     sourceType: source, 
     allowEdit: false, 
     encodingType: Camera.EncodingType.JPEG, 
     popoverOptions: CameraPopoverOptions, 
     saveToPhotoAlbum: false 
    }; 
    } 

    function saveMedia(type) { 
    return $q(function(resolve, reject) { 
     var options = optionsForType(type); 

     $cordovaCamera.getPicture(options).then(function(imageUrl) { 
     var name = imageUrl.substr(imageUrl.lastIndexOf('/') + 1); 
     var namePath = imageUrl.substr(0, imageUrl.lastIndexOf('/') + 1); 
     var newName = makeid() + name; 
     $cordovaFile.copyFile(namePath, name, cordova.file.dataDirectory, newName) 
      .then(function(info) { 
      FileService.storeImage(newName); 
      resolve(); 
      }, function(e) { 
      reject(); 
      }); 
     }); 
    }) 
    } 
    return { 
    handleMediaDialog: saveMedia 
    } 
}); 

может кто-то помочь мне решить эту проблему и помочь мне с page2 в imageviewing

+1

попробовать не используя $ объем $ применяется() – Ila

+0

кто-то может мне помочь в отображении изображения в. другая страница –

ответ

0

Как заявил @Ila проблема, вероятно, из-за $ сфера. $ применять().

Так что, если вы не можете предсказать, если он должен быть использован затем вставить в если заявление следующим образом:

if(!$scope.$$phase) { 
    // no digest in progress... 
    $scope.$apply(); 
} 

Однако это не очень хорошая практика: предпочитают использовать $ объем $ применяется (.) только тогда, когда это действительно необходимо(). См. Angular docs

0

Я согласен с vb-платформой. Но то, что вы также можете сделать оборачивает свой код в $timeout так angularjs будет обрабатывать $apply для вас ($timeout):

$ionicPlatform.ready(function() { 
    console.log('ionic is ready'); 

    $timeout(function setImages() { 
     $scope.images = FileService.images(); 
    }); 
}); 
Смежные вопросы