ionic:$ location.path仅在我使用$ scope时有效。$ apply()

时间:2016-05-14 20:00:40

标签: angularjs ionic-framework angular-ui-router angular-ui

我对离子很新,并试图实现相机功能。我在routes.js中设置了如下状态

.config(function($stateProvider, $urlRouterProvider) {

  // Ionic uses AngularUI Router which uses the concept of states
  // Learn more here: https://github.com/angular-ui/ui-router
  // Set up the various states which the app can be in.
  // Each state's controller can be found in controllers.js
  $stateProvider
  .state('capture', {
    url: '/',
    templateUrl: 'templates/capture.html',
    controller: 'captureCtrl'
  })

  .state('selectColor', {
    url: '/selectColor',
    templateUrl: 'templates/selectColor.html',
    controller: 'selectColorCtrl'
  })

$urlRouterProvider.otherwise('/')
})

在capture.html中,我点击了使用以下方法打开相机的图像

$scope.capturePhoto = function() {
    // Take picture using device camera and retrieve image as base64-encoded string
    navigator.camera.getPicture($scope.onPhotoDataSuccess, $scope.onFail, {
      quality: 30,
      targetWidth: 600,
      targetHeight: 600,
      destinationType: navigator.camera.PictureSourceType.FILE_URI,
      saveToPhotoAlbum: true
    });
  }

  $scope.onPhotoDataSuccess = function(imageURI) {
    console.log(imageURI);
    $location.path('/selectColor');
  }

  $scope.onFail = function(message) {
    //alert('Failed because: ' + message);
  }

关于照片成功,控制是来到$ scope.onPhotoDataSuccess方法,我试图使用$ location.path(' selectColor')移动到/ selectColor但是它没有渲染selectColor.html页面通常我必须使用$ scope。$ apply()才能显示它。

我有角度和AFAIK的经验,如果你已经在角度内,那么你不需要调用$ scope。$ apply()

在我的情况下出了什么问题,是否有不同的方式在离子而不是$ location.path()中路由到另一个页面?

谢谢, Prateek

1 个答案:

答案 0 :(得分:2)

这一切都取决于调用$ scope.onPhotoDataSuccess的位置,当你考虑是否在角度"内部#34;。鉴于它可能是从navigator.camera调用的,它不会出现在角度功能(ng-click,ng-submit等)中,你必须继续致电$scope.$apply()以使其正常运作。没有什么是错的,这是它应该如何运作的。