2016-08-10 5 views
1

にDBからデータをプッシュした後、だから私は、DBからデータを取得し、ここでスクリプトは別のJavaScript関数を呼び出すと、配列

if(type == 'createSupplierInvoice'){ 
      vm.data.organization = {}; 
      vm.data.organization.selected = { 
       name: result.data.name, 
       id: result.data.organization_id 
      } 
      vm.data.ship_request_id = result.data.ship_request_id; 
      vm.data.terms = Number(result.data.payment_terms); 
      if(result.products.length > 0){ 
       for(var i = 0;i<result.products.length;i++){ 
        vm.products.push({ 
         id: result.products[i].id, 
         product_id: result.products[i].ship_product_id, 
         code : result.products[i].ship_product_code, 
         description : result.products[i].ship_product_description, 
         request_quotation_detail_id : result.products[i].ship_request_quotation_detail_id, 
         qty : result.products[i].qty, 
         price : result.products[i].price, 
         total_price : result.products[i].total_price, 
         remarks : result.products[i].remarks, 
         temp_tax : 0, 
         temp_total: 0, 
         temp_subtotal: 0, 
        }); 
       } 
      } 
      for(var d = 0; d < vm.products.length; d++){ 
       calculateTotal(vm.products[d]); 
       console.log(vm.products[d]); 
      } 
     } 

は私calculateTotal機能

である私のangularJSに配列にプッシュしている、このコードを持っています
function calculateTotal(items){ 
    console.log(items); 
    var tax   = parseFloat(vm.data.tax_percentage); 
    var qty   = parseFloat(items.qty); 
    var price   = parseFloat(items.price); 
    var temp_total  = parseFloat(0), temp_subtotal = parseFloat(0); 

    temp_subtotal += (qty * price); 
    tax  = parseFloat(temp_subtotal * (vm.data.tax_percentage * 1)/100); 
    temp_total += parseFloat(temp_subtotal + tax); 

    items.temp_tax  = parseFloat(tax); 
    items.temp_subtotal = parseFloat(temp_subtotal); 
    items.temp_total = parseFloat(temp_total); 

    setTotal(); 
} 
function setTotal(){ 
    var calculated_tax = parseFloat(0), calculated_subtotal = parseFloat(0), calculated_total = parseFloat(0); 
    for(var i = 0; i < vm.products.length; i++){ 
     calculated_tax  += parseFloat(vm.products[i].temp_tax); 
     calculated_subtotal += parseFloat(vm.products[i].temp_subtotal); 
     calculated_total += parseFloat(vm.products[i].temp_total); 
    } 
    vm.data.total_tax = parseFloat(calculated_tax).toFixed(2); 
    vm.data.subtotal = parseFloat(calculated_subtotal).toFixed(2); 
    vm.data.grandtotal = parseFloat(calculated_total).toFixed(2); 
} 

私はconsole.log(items)をcalculateTotal関数の中に入れてコードをテストしましたが、決して起動しません。この関数は、dbからのデータによってプッシュされた後、配列ループで呼び出されていません。

ただし、console.log(vm.products [d])が動作しています。正しいデータが表示されます。私はこれらの2つの関数(calculateTotalとsetTotal)の中にすべてのコードを貼り付けてコピーすると、それも働いています。私はループ内で直接呼び出すとcalculateTotal関数が起動されない理由はわかりません。誰かが私を導くことができますか?

ありがとうございます。

+0

コンソールですべてのエラー? – jcubic

+0

いいえ、全く誤りはありません。すべて正常に動作しています – Vinfoster0701

答えて

0

どの時点で機能を宣言しましたか?また、スコープに機能が追加されていますか?宣言する前に関数を呼び出すと、それは私が推測する問題を与えるでしょう。

サンプルコードを試してみましたが、うまく動作しました。

var a=[ 
{'name':'jack','age':23}, 
{'name':'jones','age':24} 
] 

var calculateTotal= function(items){ 
    console.log(items); 
} 

for(var d = 0; d < a.length; d++){ 
    calculateTotal(a[d].name); 
    console.log(a[d].name); 
} 

JSFIDDLE

+0

関数の宣言は関数の先頭に持ち込まれるため、関数を使用した後で関数を宣言できます – jcubic

関連する問題