Ich bin ein Anfänger zu angularjs
. In meinem NFC-Projekt möchte ich in der Lage sein, von dem Server Daten basierend auf einem sich ändernden patientId
abzurufen.
Allerdings kann ich meine $watch
nicht richtig ausführen, obwohl ich sehe, dass die patientId
ändert jedes Mal, wenn ich ein neues NFC-Tag scannen.
Nicht sicher, was ich hier vermisse - bitte erleuchte mich!
aktualisiert Per rakslice Empfehlung, habe ich ein Objekt meine Daten in der Fabrik zu halten, und jetzt die html (mit einiger Serverseite Verzögerung) zeigt korrekt die aktualisierten Werte, wenn ein neuer Tag NFC gescannt wird.
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);
}
};
});
Ich werde dies einen Versuch geben, aber ich verstehe nicht, dann, wie die 'tag'-Variable wird erfolgreich aktualisiert (zumindest sehe ich das, wenn ich sie in einer HTML-Seite verwende) –
Im Gegensatz zu' patientId', dem Sie einen neuen Wert zuweisen, vergeben Sie mit 'tag' keine Neuer Wert für die Variable, Sie verwenden 'angular.copy()' darauf, wodurch das Objekt, auf das es zeigt, geändert wird . Da dies das gleiche Objekt ist, auf das der 'tag' im zurückgegebenen' NfcService' zeigt, wird Code, der'NfcService' verwendet, die Änderung sehen. Dies ist nur das normale Verhalten der alten JavaScript-Primitivdaten im Vergleich zum Objektreferenzverhalten: http: // stackoverflow.com/a/13266769/60422 – rakslice
Danke für die Erklärung. Durch das Erstellen eines Objekts und das Verschieben von http GET-Anfragen in die Factory konnte ich die Notwendigkeit von "$ watch" im Controller vollständig eliminieren. –