Ich habe einen Code, um einen Barcode-Scan zu erkennen. Es funktionierte, als es direkt in einem AngularJS-Controller war. Da ein anderer Controller diesen Code ebenfalls verwenden musste, legte ich den Scan-Code in eine separate JS-Datei, damit beide ihn verwenden konnten. Meine Recherchen zeigten, dass der Aufruf einer JS-Datei aus einer anderen funktionieren sollte, wenn ich sie in die HTML-Seite einfüge. Ich habe das getan. Aber nach dem Scan-Code einen Scan erkennt, versucht es, ein Verfahren auf dem anderen Controller anzurufen, aber ich bekomme diese Fehlermeldung:Funktion in einer JavaScript-Datei von einer anderen aufrufen, in einem setTimeout und mit AngularJS
0x800a1391 - JavaScript runtime error: 'onBarcodeScan' is undefined
In barcodeScan.js:
setTimeout(function() {
if (chars.length == 12) {
var barcode = chars.join("");
onBarcodeScan(barcode); // Error occurs here
}
chars = [];
pressed = false;
}, 500);
In meinem AngularJS Controller:
var onBarcodeScan = function (barcode) {
$scope.$apply(function() {
$scope.state.userEnteredSubId = barcode;
$scope.onSubmitSubId();
});
}
Was fehlt mir?
Hinweis: Mein Controller-Code wird zuerst im Index HTML-Seite:
<script src="js/cassetteController.js"></script>
<script src="js/barcodeScan.js"></script>
Ich denke 'onBarcodeScan()' nicht den Zugang der Öffentlichkeit haben. Sie müssen es offen legen, oder Sie können es über mehrere Controller freigeben, indem Sie einen [angular service] (https://docs.angularjs.org/guide/services) verwenden. – Rohit416
Warum verwenden Sie ** angular $ broadcast **, wenn es im Winkelregler arbeitet. Ansonsten lesen Sie den Code im eckigen Controller und setzen Sie dieses Ergebnis durch einfache JavaScript-Funktion in Variable und in einem anderen Controller erhalten Sie dieses Ergebnis erneut. Es wird klappen. –
Erhöhen Sie das Timeout auf zehn Sekunden und sehen Sie, ob dies noch immer geschieht. Kann ein Ladeproblem sein. – Niloct