Go to file
Peter Kelly cb293639bc fix(core): fix exception in CordovaProperty (#998)
This reverts part of commit 67adb23, which moved the call to getPlugin()
from within CordovaProperty() to a point where it was called too early.

When the CordovaProperty decorator is called on a property, the class
containing that call has not yet had its Plugin decorator called. Only
when the latter happens does pluginRef get set. Thus, attempting to
access pluginRef within CordovaProperty at the time of the call will
give undefined, and attemping to call getPlugin with an undefined value
will throw an exception:

    Runtime Error
    Cannot read property 'split' of undefined

    TypeError: Cannot read property 'split' of undefined
        at get
        at getPlugin
        at CordovaProperty
        at __decorate
        ...

The above message can be seen in the browser after running the 'ionic
serve' command.

This commit moves the getPlugin call back to the getters and setters
established by CordovaProperty, which are only called *after* the Plugin
decorator has finished executing.

closes #992
2017-01-22 17:11:52 -05:00
.github chore(): update contributing guide 2016-10-14 08:12:35 -04:00
scripts amend(docs): typo in the last commit 2017-01-11 13:02:00 -06:00
src fix(core): fix exception in CordovaProperty (#998) 2017-01-22 17:11:52 -05:00
test test(): add mixpanel test back 2016-10-27 19:04:59 -04:00
typings test(): add initial test suite (#523) 2016-09-06 21:42:29 -04:00
.editorconfig chore(): add .editorconfig (#238) 2016-06-22 18:25:06 -04:00
.gitignore docs(DEVELOPER.MD): Adds steps for adding new plugins to index.ts (#444) 2016-08-17 03:11:52 -04:00
CHANGELOG.md chore(): update changelog 2017-01-20 16:34:25 -05:00
circle.yml test(): add initial test suite (#523) 2016-09-06 21:42:29 -04:00
DEVELOPER.md docs(DEVELOPER.MD): Adds steps for adding new plugins to index.ts (#444) 2016-08-17 03:11:52 -04:00
gulpfile.js chore(): deleted ionic-gulp-tslint change for gulp-tslint directly (#611) 2016-10-06 00:37:34 -04:00
karma.conf.ts test(): fix tests 2016-10-27 06:59:00 -04:00
LICENSE chore(): add license 2016-09-25 17:59:21 -04:00
package.json 2.3.0 2017-01-20 16:33:57 -05:00
README.md fix badges 2016-09-25 17:58:32 -04:00
tsconfig-es5.json chore(build): rename to more explicit tsconfig-es5.json 2016-09-14 14:13:14 -05:00
tsconfig-esm.json Package 2016-09-09 09:50:13 -05:00
tsconfig.json chore(): update packages 2017-01-10 07:40:21 -05:00
tslint.json chore(tslint-rules): Use ionic-tslint-rules (#276) 2016-07-18 00:09:38 -04:00
typings.json test(): add initial test suite (#523) 2016-09-06 21:42:29 -04:00

Circle CI Commitizen friendly npm

NPM NPM

Ionic Native

Ionic Native is a curated set of wrappers for Cordova plugins that make adding any native functionality you need to your Ionic, Cordova, or Web View mobile app easy.

Documentation

For the full Ionic Native documentation, please visit http://ionicframework.com/docs/v2/native/.

Promises and Observables

Ionic Native wraps plugin callbacks in a Promise or Observable, providing a common interface for all plugins and ensuring that native events trigger change detection in Angular 2.

import { Geolocation } from 'ionic-native';

Geolocation.getCurrentPosition().then(pos => {
  console.log('lat: ' + pos.coords.latitude + ', lon: ' + pos.coords.longitude);
});

let watch = Geolocation.watchPosition().subscribe(pos => {
  console.log('lat: ' + pos.coords.latitude + ', lon: ' + pos.coords.longitude);
});

// to stop watching
watch.unsubscribe();

Angular 1

Ionic Native works as a stand-in for ngCordova. In many cases, the usage is identical, but we import ionic.native instead of ngCordova as our module.

As a rule of thumb: take the ES6 class name of the plugin and add $cordova to get the service name. For example, Geolocation would be $cordovaGeolocation, and Camera will be $cordovaCamera:

angular.module('myApp', ['ionic', 'ionic.native'])

.controller('MyCtrl', function($scope, $cordovaCamera) {
  $scope.takePicture = function() {
    $cordovaCamera.getPicture(opts).then(function(p) {
    }, function(err) {
    });
  };
});

For services that return observables, the Angular 1 digest cycle must be done manually (currently):

angular.module('myApp', ['ionic', 'ionic.native'])

.controller('MyCtrl', function($scope, $cordovaGeolocation) {
  $scope.takePicture = function() {
    $cordovaGeolocation.watchPosition(opts).subscribe(function(p) {
      $scope.$apply(function() {
        $scope.position = p.coords;
      });
    }, function(err) {
    });
  };
});

Runtime Diagnostics

Spent way too long diagnosing an issue only to realize a plugin wasn't firing or installed? Ionic Native lets you know what the issue is and how you can resolve it.

img

Installation

Run following commmand to install ionic-native in your project.

npm install ionic-native --save

Plugin Missing?

Let us know or submit a PR! Take a look at the Developer Guide for more on how to contribute. ❤️

Credits

Ibrahim Hadeed - @ihadeed

Tim Lancina - @timlancina

Max Lynch - @maxlynch

Rob Wormald - @robwormald