title: $scope.$watch does not seem to watch factory variable
body: <p>I'm a beginner to <code>angularjs</code>. In my NFC project, I want to be able to GET from the server data based on a changing <code>patientId</code>.</p>
  
  <p>However, I am not able to see my <code>$watch</code> execute correctly, even though I see that the <code>patientId</code> changes each time I scan a new NFC tag.</p>
  
  <pre><code>var nfc = angular.module('NfcCtrl', ['PatientRecordsService'])
  
  nfc.controller('NfcCtrl', function($scope,  NfcService, PatientRecordsService) {
      $scope.tag = NfcService.tag;
      $scope.patientId = NfcService.patientId
      $scope.$watch(function() {
          return NfcService.patientId;
      }, function() {
          console.log("Inside watch");
  
          PatientRecordsService.getPatientRecords(NfcService.patientId)
          .then(
              function(response) {
                  $scope.patientRecords = response
              },
              function(httpError) {
                  throw httpError.status + " : " +
                      httpError.data;
              });
      }, true);
      $scope.clear = function() {
          NfcService.clearTag();
      };
  });
  
  nfc.factory('NfcService', function($rootScope, $ionicPlatform, $filter) {
  
      var tag = {};
      var patientId = {};
  
      $ionicPlatform.ready(function() {
          nfc.addNdefListener(function(nfcEvent) {
              console.log(JSON.stringify(nfcEvent.tag, null, 4));
              $rootScope.$apply(function(){
                  angular.copy(nfcEvent.tag, tag);
                  patientId = $filter('decodePayload')(tag.ndefMessage[0]);
              });
              console.log("PatientId: ", patientId);
          }, function() {
              console.log("Listening for NDEF Tags.");
          }, function(reason) {
              alert("Error adding NFC Listener " + reason);
          });
      });
  
      return {
          tag: tag,
  
          patientId: patientId,
  
          clearTag: function () {
              angular.copy({}, this.tag);
          }
      };
  
  });
  </code></pre>
  
  <p>Not sure what I'm missing here - please enlighten me!</p>
  
  <p><strong>Update</strong>
  Per rakslice's recommendation, I created an object to hold my data inside the factory, and now the html (with some server side delay) correctly displays the updated values when a new NFC tag is scanned.</p>
  
  <pre><code>var nfc = angular.module('NfcCtrl', ['PatientRecordsService'])
  
  nfc.controller('NfcCtrl', function($scope,  NfcService) {
      $scope.tagData = NfcService.tagData;
      $scope.clear = function() {
          NfcService.clearTag();
      };
  });
  
  nfc.factory('NfcService', function($rootScope, $ionicPlatform, $filter, PatientRecordsServi\
  ce) {
  
      var tagData = {
          tag: null,
          patientId: null,
          patientRecords: []
      };
  
      $ionicPlatform.ready(function() {
          nfc.addNdefListener(function(nfcEvent) {
              //console.log(JSON.stringify(nfcEvent.tag, null, 4));
              $rootScope.$apply(function() {
                  tagData.tag = nfcEvent.tag;
                  tagData.patientId = $filter('decodePayload')(tagData.tag.ndefMessage[0]);
                  PatientRecordsService.getPatientRecords(tagData.patientId)
                      .then(
                          function(response) {
                              tagData.patientRecords = response
                          },
                          function(httpError) {
                              throw httpError.status + " : " +
                                  httpError.data;
                          });
              });
              console.log("Tag: ", tagData.tag);
              console.log("PatientId: ", tagData.patientId);
          }, function() {
              console.log("Listening for NDEF Tags.");
          }, function(reason) {
              alert("Error adding NFC Listener " + reason);
          })
      });
  
      return {
          tagData: tagData,
          clearTag: function() {
              angular.copy({}, this.tagData);
          }
      };
  });
  </code></pre>