javascript – 如何将Phonegap Camera与AngularJS集成

前端之家收集整理的这篇文章主要介绍了javascript – 如何将Phonegap Camera与AngularJS集成前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图找出将手机相机与AngularJS集成的最佳做法.我尝试的第一种方法是创建一个工厂,承诺将从ng点击调用.另一种方法是将代码正确放在控制器内的ng-click内,但不能重复使用.也许可以这样做?我确定还有其他一些方法. “anglejs”的方式是什么?

这是我尝试的工厂方法的一个例子

HTML

<button ng-click="takepic">Take Picture</button>

控制器:

function picturePageCtrl($scope,Camera) {
    $scope.takepic = function() {
        // I'd like to push this into an array of "pics" here.
        // but it is hard to push() with promises.
        Camera.getPic();
    }
}

工厂:

.factory('Camera',function($q) {
    var deferred = $q.defer();
    return {
        getPic: function() {
            navigator.camera.getPicture(
                function (imageURI) {
                    deferred.resolve(imageURI);
                },function (message) {
                    deferred.reject(message);
                },{
                    quality: 50,destinationType: Camera.DestinationType.FILE_URI
                }
            );
            return deferred.promise;
        }
    }
})

解决方法

就我个人而言,我将逻辑放在一个指令中,因为它需要访问DOM函数(并且指令更适合于此).如果在指令中使用require:’ngModel’,可以使用它来存储输出值.

HTML:

<button camera ng-model='myPicture'>Take Picture</button>

指示:

app.directive('camera',function() {
   return {
      restrict: 'A',require: 'ngModel',link: function(scope,elm,attrs,ctrl) {
         elm.on('click',function() {
            navigator.camera.getPicture(function (imageURI) {
               scope.$apply(function() {
                  ctrl.$setViewValue(imageURI);
               });
            },function (err) {
               ctrl.$setValidity('error',false);
            },{ quality: 50,destinationType: Camera.DestinationType.FILE_URI }
         });
      }
   };
});

在你的控制器中,你可以看看模型并将其推入一个数组:

$scope.myPictures = [];
$scope.$watch('myPicture',function(value) {
   if(value) {
      myPictures.push(value);
   }
},true);

猜你在找的JavaScript相关文章