2014-10-18 29 views
0

我是Angular的新手,對我的問題的回答很可能是「這不是角度做的」。可以通過角度指令提供公共方法

我有一個模板擴展指令,提出了一個清單:

[ ] mushrooms 
[ ] peppers 
[ ] onions 
[ ] artichokes 
[ ] anchovies 

的清單數據源是對象的數組。一個底層對象的屬性是「位」:

mushrooms bits:2, 
peppers bits: 4, 
onions bits: 8, 
artichokes bits: 16, 
anchovies: 32. 

有人誰下令,蘑菇和鳳尾魚比薩餅本來總位數:34

是否有清單指令封裝方式一個TotalBits()方法可以被$ scope訪問嗎? $ scope中的實例化清單對象是否存在「句柄」?

+1

通常,您可以通過該清單作爲參數的指令,並且該指令修改它。由於您創建並傳遞了checkList,因此您可以訪問其屬性。就像你使用ng-model將模型傳遞給輸入指令一樣。 – 2014-10-18 11:12:51

+0

我的指令創建了產生複選框項目的HTML。但我不明白,在我的指令代碼中,如何「嵌入」TotalBits()函數,然後如何以可以綁定到另一個範圍變量的方式公開函數的返回值。最終,我想將總比特值保存到數據庫中。我可以有一個單獨的*函數來計算總位數,但是我想知道函數可以封裝在checklist指令中。 – Tim 2014-10-18 11:18:00

+0

如何將檢查表作爲實體?它有一個容器div。它由p個元素組成。檢查輸入和標籤。 – Tim 2014-10-18 11:21:51

回答

0

您可以隨時將回調方法傳遞給指令(作爲屬性),一旦該指令具有計算的位數,指令將調用該指令。

+0

'TotalBits()'方法的返回值如何綁定到'$ scope.pizzaBits'? – Tim 2014-10-18 11:14:39

+0

您將方法「onTotalBitsCalculated」從我認爲是控制器的屬性傳遞給該指令。在指令內部,一旦確定了選擇,就可以使用totalBits值調用onTotalBitsCalculated方法。在控制器內部,傳遞給指令的onTotalBitsCalculated方法將如下所示: onTotalBitsCalculated = function(totalBits){ $ scope.pizzaBits = totalBits; } – 2014-10-18 11:19:29

+0

因此,指令不能是一個「自包含」的對象,它有自己的屬性和自己的方法嗎?該函數必須*通過*到它? – Tim 2014-10-18 11:23:58

0

您可以擴展您的模塊以實現此功能。看到這個例子:

var menu = [{ 
    name: 'mushrooms', 
    bits: 2, 
    selected: false 
}, { 
    name: 'pepers', 
    bits: 4, 
    selected: false 
}]; 
menu.totalBits = function() { 
    var total = 0; 
    this.forEach(function (item) { 
     if (item.selected) total = total + item.bits; 
    }); 
    return total; 
}; 

由於JS是可延展的,我們可以將totalBits函數添加到模型數組,它就是這樣。

我創建了一個搗鼓它也http://jsfiddle.net/s8n5y2kg/

+0

謝謝你的回答。這是我正在採取的方法(但使用標準循環)。但是我想知道更多關於指令的功能,並且如果該功能可能以某種方式封裝在清單「控制」中,以便控件的totalBits值可以綁定到表單模型中的標量變量。 – Tim 2014-10-18 16:27:17