Ionic Cordova Cameraプラグインが必要なプロジェクト(これで正常にインストールされました)があります。しかし、私のプロジェクトではCamera APIがまだ利用できません。エラーがスローされます。
ReferenceError: Camera is not defined
at Scope.$scope.takePic
Ionicプロジェクトで使用するプラグインAPIをアクティブにするにはどうすればよいですか?これに関するドキュメントはかなり存在しないか、非常によく隠されているようです。
次の手順を実行します:
1。 cordova.js
の前にngCordovaを含めます
同じ説明を見つけることができます ドキュメント内 。
<script src="lib/ngCordova/dist/ng-cordova.js"></script>
<script src="cordova.js"></script>
2。コマンドラインにプラグインを追加します
このステップはドキュメントで見つけることができます 特定のプラグインのセクション 。
ionic plugin add org.Apache.cordova.camera
3。ブラウザでの作業中はCordovaを使用できないことに注意してください
したがって、$cordovaCamera.getPicture
を使用する場合、ライブラリは内部的にnavigator.camera.getPicture
を呼び出しますが、これはデスクトップブラウザーでの開発時には利用できません。 さらに読む
NgCordova/Ionicチームは現在 モックで作業中 このような問題を回避するために使用できます。
NgCordovaはここからダウンロードできます。 http://ngcordova.com/docs/install/
Update: Ionic Native があります。これはngCordovaに似ていますが、ES6およびTypeScript用です。
アプリのルートディレクトリでターミナルを開き、経由でプラグインを追加します
cordova plugin add org.Apache.cordova.camera
編集:
新しいコマンドは次のとおりです。
cordova plugin rm cordova-plugin-camera //remove
cordova plugin add cordova-plugin-camera //add
Ionic自分で標準Cordovaプラグインを使用する方法を見つけようとしているが、ionicチームは最近ngCordova--an angular使用するCamera APIを含む一般的なCordova APIのラッパー。それを使用することをお勧めします。詳細については their docs を参照してください。
プロジェクトディレクトリに移動します。
次のコマンドを実行します:
$ ionic統合によりcordova --quietが有効になります
(これが他の人を助けることを願っています。)
これは、ブラウザーでテストする場合の一般的な問題です。 http://ngcordova.com/docs/common-issues/
次を実行してプラグインをインストールできます。
$ cordova plugin add org.Apache.cordova.camera
プラグインがインストールされたので、JavascriptからカメラAPIを使用できます。
function takePicture() {
navigator.camera.getPicture(function(imageURI) {
// imageURI is the URL of the image that we can use for
// an <img> element or backgroundImage.
}, function(err) {
// Ruh-roh, something bad happened
}, cameraOptions);
}
これは、ユーザーに写真を撮るように促し、画像のローカルURLを返します。このURLは、タグ内で使用したり、CSS背景画像に使用したりできます。
以下のコードを使用して、Cameraプラグインの単純なラッパーを使用して、写真を簡単に非同期で取得できます。
module.factory('Camera', ['$q', function($q) {
return {
getPicture: function(options) {
var q = $q.defer();
navigator.camera.getPicture(function(result) {
// Do any magic you need
q.resolve(result);
}, function(err) {
q.reject(err);
}, options);
return q.promise;
} } }]);
このファクトリーは、次のようにコントローラーで使用できます。
.controller('MyCtrl', function($scope, Camera) {
$scope.getPhoto = function() {
Camera.getPicture().then(function(imageURI) {
console.log(imageURI);
}, function(err) {
console.err(err);
});
};
GetPhoto()が呼び出されたときにカメラを開きます(たとえば、ボタンのクリックから)。
カメラからのデータをどのようにリクエストしてAngularマークアップで使用するかに応じて、画像URLをホワイトリストに登録して、Angular file://URL(たとえば、タグにng-srcを使用している場合):
module.config(function($compileProvider){
$compileProvider.imgSrcSanitizationWhitelist(/^\s*(https?|ftp|mailto|file|tel):/);
})
次のように、Camera
をコントローラーに挿入する必要があります。
.controller('MyCtrl', function($scope, Camera) {
Camera
の前にドル記号がないことに注意してください。これは、より明確に文書化する必要があります。
また、services.jsにファクトリーを追加する必要があります。
.factory('Camera', ['$q', function($q) {
return {
getPicture: function(options) {
var q = $q.defer();
navigator.camera.getPicture(function(result) {
// Do any magic you need
q.resolve(result);
}, function(err) {
q.reject(err);
}, options);
return q.promise;
}
}
}])