How to add an optional variable to fn in $interval service on AngularJS.
AngularJSの$intervalサービス内で指定した関数に変数を受け渡すには
$interval(fn, delay, [count], [invokeApply], [Pass]);
のPassの箇所に受け渡す変数を記述します。
その他オプション項目[ ]も指定する必要があるようです。
ここでは、テンプレート内のキャンセルURL $cancel_url をスクリプト側に受け渡しています。
PrestaShopはSmartyによるテンプレートデザインを導入しているため、テンプレートとスクリプトを以下のように記述します。
テンプレートファイル
ng-init="init({$status},'{$addr}',{$timestamp},'{$base_websocket_url}','{$redirect_link}','{$cancel_url}')"
スクリプトファイル
$scope.tick = function(cancel_url) {
$scope.clock = $scope.clock-1;
$scope.progress = Math.floor($scope.clock*totalProgress/totalTime);
if($scope.progress == 0){
//Refresh invoice page
$window.location.href = cancel_url;
}
};
$scope.init = function(invoice_status, invoice_addr, invoice_timestamp, base_websocket_url, final_url, cancel_url){
if(invoice_status == -1){
$scope.tick_interval = $interval($scope.tick, 1000, 0, true, cancel_url);
var ws = new WebSocket(base_websocket_url);
ws.onopen = function() {
var data = { "op" : "addr_sub", "addr" : "invoice_addr" };
var message = JSON.stringify(data);
ws.send(message);
}
ws.onmessage = function (evt) {
$window.location.href = final_url;
}
}
};