[操作疑難] cordova plugin callback 係咪唔可以用angularjs assign value?

本帖最後由 gamezz 於 2015-9-11 12:54 編輯

cordova v4 裝左這個plugin:
https://github.com/vkeepe/card.io

scan完張卡,會比返 card number我,
angularjs assign 唔倒個value落去 (frontend no update),
但jquery又得...
  1. <input type="tel" placeholder="•••• •••• •••• ••••" class="cc-number" data-clear-btn="true" id="card_no" ng-model="payment.card_no" autocomplete="cc-number">
  2. <div ng-show="canScan">
  3.                                                                 <a href="#" id="plan_scancard_btn" ng-click="scanCard();" style="color:#000; text-decoration:none; display:block">
  4.                                                                         <i style="font-size:1.2em" class="fae-scan"></i><div style="font-size:0.8em; line-height:1em;" data-t="scan"></div>
  5.                                                                 </a>
  6.                                                         </div>
複製代碼
  1. ang.controller('PlanController', function($scope, $http) {
  2.         $scope.canScan = false;
  3.         $scope.payment = {
  4.                                                 card_no: ""
  5.                                                 ,exp_mm: ""
  6.                                                 ,exp_yy: ""
  7.                                                 ,cvv: ""
  8.                                         };
  9.         CardIO.canScan($scope.onCardIOCheck);

  10.         $scope.scanCard = function() {

  11.                 CardIO.scan({
  12.                                 "expiry": true,
  13.                                 "cvv": true,
  14.                                 "zip": false,
  15.                                 "suppressManual": false,
  16.                                 "suppressConfirm": false,
  17.                                 "hideLogo": true
  18.                         },
  19.                         $scope.onCardIOComplete,
  20.                         $scope.onCardIOCancel
  21.                 );
  22.         }
  23.        
  24.         $scope.onCardIOCheck = function(canScan) {
  25.                 $scope.canScan = true;
  26.         }
  27.         $scope.onCardIOCancel = function() {
  28.                 //alert("card.io scan cancelled");
  29.         }
  30.         $scope.onCardIOComplete = function(response) {
  31.                 //alert("card.io scan complete");

  32.                 //not work
  33.                 $scope.payment.card_no = response["redacted_card_number"];
  34.                
  35.                 //work
  36.                 $("#card_no").val( response["redacted_card_number"] );
  37.         }
  38. });
複製代碼

因為plugin callback原本唔係angular $scope裏面,所以唔識得叫 angular 個scope digest返個新value
你要用$scope.$apply 包返住你assign value 入 $scope果句

detail 你睇人地講得清楚d http://jimhoskins.com/2012/12/17/angularjs-and-apply.html

$scope.onCardIOComplete = function(response) {
    $scope.$apply(function() {
        $scope.payment.card_no = response["redacted_card_number"];
    });
}

TOP

回覆 2# cyrilhl


    神人,成功了,萬分感謝。

TOP

回覆 3# gamezz


    大家研究下o者,神人未輪到我

TOP

$scope.$applyAsync好過就咁apply

TOP

回覆 5# Jackass_TMxCK

想請教下點用$applyAsync()
我見api講話可以group埋幾樣野先 digest
不過無乜sample code講點寫

TOP