Accessing ngModel from controller and watch for changes

i have make custom directive which is working good. It's plunker is at http://plnkr.co/edit/GxM78QRwSjTrsX1SCxF7?p=preview

in that directive there is ngModel call deptStation I want access it in controller so that i can use it as parameter in other function to make new array. I also want to watch it also so on every change I can call the function.

    <plexus-select items="deptStations" header-text="Select station" text="Select departure..." text-icon="ion-chatbubble-working" text-field="City_Name_EN" text-field2="City_Code" value-field="City_Code" ng-model="deptStation">
   </plexus-select>

I tried to write below code but it don't show console log

$scope.$watch('deptStation', function(newValue, oldValue) {
  if(oldValue != newValue) {
    // perform something
    console.log('New Value ' + newValue);
  }

I'm not exactly sure about ionic directives, but your issue is probably because one or more of the ionic directives creates a new scope, so just doing ng-model="deptStation" creates a new property in that scope rather than your controller's.

To avoid these issues you should make sure not to bind to primitives, but arrays/objects instead. You should create the property like so (renamed to selectedStation for clarity):

$scope.selectedStation = {value: null};

Then your watch will work:

$scope.$watch('selectedStation.value', function (station) {
    console.log('watch', station);
});

http://plnkr.co/edit/96VgPzEXZuzxmHt32Afy?p=preview

As @m59 said though, it seems you'd be better just using two-way binding than ng-model.