2016-04-24 74 views
0

當前在視圖中,totalCost作爲函數傳遞給round,但它必須是整數值。如何從工廠傳遞的函數中返回值?

查看

{{round(shoppingCart.totalCost)}} 

myApp.factory(.... 
var calculateTotalCost = function(){ 
    return this.items.map(function(item){ 
     return HelperFunctions.getPrice(item) * item.quantity; 
    }).reduce(function(p, c){ 
     return p + c; 
    }); 
    }; 
var factory = { 
shoppingCart: {order: currentOrder, totalCost: calculateTotalCost} 
} 
return factory; 
} 

如何解決呢?

round : function (value) { 
     return typeof value !== 'undefined'? value.toFixed(2): 0; 
     } 

回答

1

目前你有totalCost變量,calculateTotalCost功能的shoppingCart對象那裏舉行的參考。因此,雖然顯示在圖相同的變量,你需要做$scope.shoppingCart = shoppingCart

有可用在視圖服務引用讓你可以根據你的情況下使用number過濾器本身具有精度2,當你想使固定值精度2。這也將幫助您以貨幣格式顯示數字。

{{shoppingCart.totalCost() | number:2 }} 
+0

這是行不通的 –

+0

@RCola好吧,我看到你的更新,它應該有'$ scope.roud = factory.round'在控制器 –

+0

現在它的工作。管道過濾器如何舍入值?我希望它像'number> = 5'一樣工作,然後整理; '數字<5'向下。 –

0

您應該避免直接在視圖表達式中調用工廠的函數。

在你的指令的控制器:

  1. 注入了工廠。
  2. 調用函數getTotalCost(它隱藏了calculateTotalCost
  3. 將結果存儲在變量中。
  4. 直接在控制器中應用輪功能也是一個不錯的主意。
  5. 最後將變量綁定到視圖。
+0

如果'items'發生變化,是否有方法通過調用'calculateTotalCost'來自動處理/更新'shoppingCart.totalCost'?我設法讓'calculateTotalCost'在'productAdd()'和'productRemove()'上得到調用,但我更喜歡Angular來處理這個問題。 –

+0

是用'$ scope。$ watch('items.length',function(){...})' –