nativescript-observable-subscribe
A NativeScript module to add subscribe functionality to observables
npm i --save nativescript-observable-subscribe

nativescript-observable-subscribe

NativeScript module that adds subscribe support to observables. Listening for observable changes can always be done using standard addEventListener technique that can be found in the NativeScript docs, but this is a much more convenient subscription method that keeps your code neat by isolating handlers for individual properties. As NativeScript is constantly evolving, a subscribe solution might be implemented in the core project as a tns module making this module obsolete; so one should keep an eye out for that.

Installation

Run npm install nativescript-observable-subscribe --save from your project's app directory:

.
├── app <------------------------------ run npm install from here
│ ├── app.css
│ ├── app.js
│ ├── bootstrap.js
│ ├── main-page.js
│ ├── main-page.xml
│ ├── node_modules
│ │ └── nativescript-observable-subscribe <-- The install will place the module's code here
│ │ └── ...
│ └── package.json <----------------- The install will register “nativescript-observable-subscribe” as a dependency here
│ └── tns_modules
│ └── ...
└── platforms
├── android
└── ios

If npm doesn't end up working for you, you can just copy and paste this repo's observablesubscribe.js file into your app and reference it directly.

Usage

To use the Observable Subscribe Module you must first require() it from your project's node_modules directory:

require( "./node_modules/nativescript-observable-subscribe/observablesubscribe" );

Once you have required the module in your code, it will execute and add the subscribe/unsubscribe functions to observable. You will be able to start using it to get notified of property changes like this:

// viewmodel.js
...
var mainViewModel = new HelloWorldModel();
var counterPropName = 'counter';

mainViewModel.subscribe(counterPropName, function(args){
if (this.get(counterPropName) <= 0) {
this.set(messagePropName, "Hoorraaay! You unlocked the NativeScript clicker achievement!");
}
else {
this.set(messagePropName, this.get(counterPropName) + " taps left");
}
}, mainViewModel);

exports.mainViewModel = mainViewModel;

If you want to unsubscribe a property from notifications, you can use the unsubscribe function like this:

// viewmodel.js
...
mainViewModel.unsubscribe(counterPropName, callback);
...

*Thanks to TJ VanToll for the directory structure graphic above and the template for this doc