VM4784:1未捕获的ReferenceError:未定义付款

时间:2016-06-10 15:00:38

标签: javascript angularjs

pay()函数列在我的控制器中,但它在Chrome中产生错误。错误是“VM4784:1未捕获的ReferenceError:未定义付款”

任何人都可以发现这个问题。这是我的代码:

app.js

// Ionic Starter App

// angular.module is a global place for creating, registering and retrieving Angular modules
// 'starter' is the name of this angular module example (also set in a <body> attribute in index.html)
// the 2nd parameter is an array of 'requires'
angular.module('starter', ['ionic','ngCordova'])

.run(function($ionicPlatform) {
  $ionicPlatform.ready(function() {



    if(window.cordova && window.cordova.plugins.Keyboard) {
      // Hide the accessory bar by default (remove this to show the accessory bar above the keyboard
      // for form inputs)
      cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);

      // Don't remove this line unless you know what you are doing. It stops the viewport
      // from snapping when text inputs are focused. Ionic handles this internally for
      // a much nicer keyboard experience.
      cordova.plugins.Keyboard.disableScroll(true);
    }
    if(window.StatusBar) {
      StatusBar.styleDefault();
    }
  });
})

.config(function($stateProvider, $urlRouterProvider) {

  $stateProvider
    .state('tabs', {
      url: '/tab',
      abstract: true,
      templateUrl: 'templates/tabs.html'
    })
    .state('tabs.home', {
      url: '/home',
      views: {
        'home-tab' : {
         templateUrl: 'templates/home.html'
        }
      }
    })
    .state('tabs.list', {
      url: '/list',
      views: {
        'list-tab' : {
         templateUrl: 'templates/list.html',
         controller: 'ListController'
        }
      }
    })
    .state('tabs.detail', {
      url: '/list/:aId',
      views: {
        'list-tab' : {
         templateUrl: 'templates/detail.html',
         controller: 'ListController'
        }
      }
    })

      // if none of the above states are matched, use this as the fallback
      $urlRouterProvider.otherwise('/tab/home');

})

.controller('ListController', ['$scope', '$http', '$state','$cordovaBluetoothSerial', function($scope, $http, $state, $cordovaBluetoothSerial) {
        $http.get('js/aboDATAONLY.json').success(function(data) {
          $scope.orders = data;
          $scope.whichorder = $state.params.aId;
        });


          function onPay() {
         var itemsArr = [];
         var invoice = {};
         var myItems = {};
         var myItem = {};

         myItem['name'] = "Sphero";
         myItem['description'] = "A robotic ball that can be controlled via apps";
         myItem['quantity'] = "1.0";
         myItem['unitPrice'] = "129.00";
         myItem['taxRate'] = '0.0';
         myItem['taxName'] = 'Tax';
         itemsArr.push(myItem);
         myItems['item'] = itemsArr;

         invoice['itemList'] = myItems;
         invoice['paymentTerms'] = 'DueOnReceipt';
         invoice['currencyCode'] = 'GBP';
         invoice['discountPercent'] = '0';
         invoice['merchantEmail'] = 'myemail@email.com';
         invoice['payerEmail'] = 'foo@bar.com';

         var returnUrl = 'http://wp1175175.wp220.webpack.hosteurope.de/speedhack/index.html';
         var retUrl = encodeURIComponent(returnUrl + "?{result}?Type={Type}&InvoiceId={InvoiceId}&Tip={Tip}&Email={Email}&TxId={TxId}");
         var pphereUrl = "paypalhere://takePayment/?returnUrl={{returnUrl}}&invoice=%7B%22merchantEmail%22%3A%22{{merchantEmails}}%22,%22payerEmail%22%3A%22{{payerEmails}}%22,%22itemList%22%3A%7B%22item%22%3A%5B%7B%22name%22%3A%22{{name}}%22,%22description%22%3A%22{{description}}%22,%22quantity%22%3A%221.0%22,%22unitPrice%22%3A%22{{price}}%22,%22taxName%22%3A%22Tax%22,%22taxRate%22%3A%220.0%22%7D%5D%7D,%22currencyCode%22%3A%22{{currency}}%22,%22paymentTerms%22%3A%22DueOnReceipt%22,%22discountPercent%22%3A%220.0%22%7D";
         //var pphereUrl = "paypalhere://takePayment?returnUrl=" + retUrl;
         pphereUrl = pphereUrl + "&accepted=cash,card,paypal";
         pphereUrl = pphereUrl + "&step=choosePayment";
         pphereUrl = pphereUrl + '&invoice=' + escape(JSON.stringify(invoice));
         console.log(pphereUrl);

         return pphereUrl; 
      }

      function pay() {  
        window.location = onPay();
      }

}]);

详细信息页面                          订单详情                                                                                         

                <h1>Production Name: {{order.bkev_name}}</h1>
                <h3>Seatcount: {{order.bkor_seatcount}}</h3>
                <h1>Order Subtotal: £{{order.bkor_subtotal}}</h1>
                </ion-item>
                <button class="button button-block button-dark" onclick="pay();">
      Pay with PayPal&trade; Here
    </button>
                </ion-list>
                </ion-content>
            </ion-view>

1 个答案:

答案 0 :(得分:1)

您定义功能的方式是控制器专用的,而$scope上不可见,因此您的视图无法看到。如果您打算从视图中调用pay(),则应将其定义为:

$scope.pay = function () { ... }