バーコードスキャンを検出するコードがあります。それはAngularJSコントローラの中にあったときに働いていました。他のコントローラーもそのコードを使用する必要があったので、スキャンコードを別のJSファイルに入れて、両方を使用できるようにしました。私の研究によると、HTMLファイルにJSファイルを含めると、別のJSファイルを呼び出すことができます。私はそれをやった。スキャンコードがスキャンを検出した後、しかし、それは他のコントローラ上のメソッドを呼び出そうとしたが、私はこのエラーを取得:barcodeScan.jsでJavaScriptファイル内の関数をsetTimeoutで呼び出し、AngularJSを使用します。
0x800a1391 - JavaScript runtime error: 'onBarcodeScan' is undefined
:私のAngularJSコントローラで
setTimeout(function() {
if (chars.length == 12) {
var barcode = chars.join("");
onBarcodeScan(barcode); // Error occurs here
}
chars = [];
pressed = false;
}, 500);
:
var onBarcodeScan = function (barcode) {
$scope.$apply(function() {
$scope.state.userEnteredSubId = barcode;
$scope.onSubmitSubId();
});
}
何が欠けていますか?
注:私のコントローラコードがインデックスHTMLページに最初にリストされています
<script src="js/cassetteController.js"></script>
<script src="js/barcodeScan.js"></script>
私は 'onBarcodeScan()は、'パブリックアクセスを持っていないと思います。それを公開するか、[角度サービス](https://docs.angularjs.org/guide/services)を使用して、複数のコントローラ間で共有することができます。 – Rohit416
角度コントローラーで動作している場合は、なぜ** angular $ broadcast **を使用しないでください。それ以外の場合は、角度コントローラのコードを読み込み、この結果を変数のプレーンJavaScript関数で設定し、別のコントローラでその結果を再度取得します。それが動作します。 –
タイムアウトを10秒に増やし、これがまだ発生するかどうかを確認します。読み込みの問題かもしれません。 – Niloct