I'm с помощью PhoneGap-плагин для чтения идентификатора NFC-теги и хотите использовать эту внутреннюю часть .factoryКак обрабатывать обратный вызов в услугах AngularJS
Так что это делает:
Внутри моего .factory я вызываю команду «nfc.addTagDiscoveredListener», которая регистрирует прослушиватель событий для NFC-тегов. При успехе он вызывает функцию holeNfc и должен запускать nfcevent.
На самом деле моя функция holeNfc вызывается, но nfcEvent не придет. В дальнейшем следствие -> tag = nfcEvent.tag; не работает, потому что он не получает nfcEvent.
Код:
app.factory('leseNfc', function($rootScope) {
// Items exposed to other modules
return {
initNfc: initNfc
};
function initNfc() {
var tag = '';
var taglesen = '';
function holeNfc(nfcEvent) {
tag = nfcEvent.tag;
taglesen = nfc.bytesToHexString(tag.id);
}
nfc.addTagDiscoveredListener(
holeNfc(), // tag successfully scanned
function (status) { // listener successfully initialized
msg = "NFC Reader ist ready";
//return msg;
},
function (error) { // listener fails to initialize
msg = "NFC Reader ist nicht ready";
//return msg;
}
);
return taglesen;
}
});
Я также попробовал то же самое внутри моего контроллера и там он работает без проблем:
app.controller('Page3Ctrl', function($scope, $rootScope, Data, leseNfc, Calc) {
$scope.item = Data.selectedItem.title;
$scope.save = function() {
Data.selectedItem.title = $scope.item;
$scope.ons.navigator.popPage();
};
$scope.readNfc = function(nfcEvent) {
var tag = nfcEvent.tag;
var taglesen = nfc.bytesToHexString(tag.id);
$scope.$apply(function() {
$scope.nfcvalue = taglesen;
});
};
nfc.addTagDiscoveredListener(
$scope.onNfc, // tag successfully scanned
function (status) { // listener successfully initialized
$scope.nfcok = "NFC Reader ist ready";
},
function (error) { // listener fails to initialize
$scope.nfcok = "NFC Reader ist nicht ready";
}
);
});
Мой контроллер:
app.controller('NFCCtrl', function($scope, $rootScope, Data, Calc, onNfc, leseNfc) {
$scope.item = Data.selectedItem.title;
$scope.save = function() {
Data.selectedItem.title = $scope.item;
$scope.ons.navigator.popPage();
};
$scope.readnfc = function() {
$scope.nfcvalue = leseNfc.initNfc();
};
});
<ons-page class="center">
<div ng-controller="NFCCtrl">
<ons-text-input ng-model="item" style="margin:10px;"></ons-text-input><br>
<ons-text-input ng-model="nfcvalue" style="margin:10px;"></ons-text-input><br>
<ons-button ng-click="save()">Save</ons-button>
<ons-button ng-click="readnfc()">Nfc</ons-button>
</div>
</ons-page>
Я люблю тебя !!!! Вы не знаете, сколько времени я потратил впустую с этим. – Idur
haha ... Ненавижу, когда мне не хватает маленькой детали как это! –
Может быть, вы можете мне помочь еще раз:) ... Осталась одна проблема. Когда я вызываю версию в своем контроллере, мне нужно только один раз нажать мою кнопку и прочитать один тег за другим, но когда я поместил его на свою фабрику, я должен все время нажимать кнопку, чтобы читать теги nfc. Я обновил свой код выше. – Idur