Script di bawah ini menampilkan gerobak toko menggunakan ng-repeat
. Untuk setiap elemen dalam larik, ini menunjukkan nama item, jumlahnya, dan subtotal ( product.price * product.quantity
).
Apa cara paling sederhana untuk menghitung harga total elemen berulang?
<table>
<tr>
<th>Product</th>
<th>Quantity</th>
<th>Price</th>
</tr>
<tr ng-repeat="product in cart.products">
<td>{{product.name}}</td>
<td>{{product.quantity}}</td>
<td>{{product.price * product.quantity}} €</td>
</tr>
<tr>
<td></td>
<td>Total :</td>
<td></td> <!-- Here is the total value of my cart -->
</tr>
</table>
angularjs
angularjs-ng-repeat
keepthepeach
sumber
sumber
Jawaban:
Di Template
Di Controller
sumber
Ini juga berfungsi pada filter dan daftar normal. Hal pertama untuk membuat filter baru untuk jumlah semua nilai dari daftar, dan juga memberikan solusi untuk jumlah total kuantitas. Dalam kode detail periksa tautan fiddler .
periksa Tautan Biola ini
sumber
'undefined'
saat menggunakanresultValue
, tetapi jika saya menggunakannyaitems
berfungsi dengan baik, ada ide .. ??items
tidak akan berfungsi dengan filter, tolong!ng-repeat="campaign in filteredCampaigns=(campaigns | filter:{'name':q})"
dan{{ filteredCampaigns | campaignTotal: 'totalCommission' | number: 2 }}
Menyadari ini menjawab lama, tetapi ingin memposting pendekatan yang berbeda tidak disajikan ...
Gunakan
ng-init
untuk menghitung total Anda. Dengan cara ini, Anda tidak perlu mengulang di HTML dan melakukan iterasi di pengontrol. Dalam skenario ini, saya pikir ini adalah solusi yang lebih bersih / sederhana. (Jika logika penghitungan lebih kompleks, saya pasti akan merekomendasikan untuk memindahkan logika ke pengontrol atau layanan yang sesuai.)Tentu saja, di pengontrol Anda, cukup tentukan / inisialisasi
Total
bidang Anda :sumber
Anda dapat menghitung total dalam
ng-repeat
mengikuti:Periksa hasilnya di sini: http://plnkr.co/edit/Gb8XiCf2RWiozFI3xWzp?p=preview
Dalam kasus hasil pembaruan otomatis: http://plnkr.co/edit/QSxYbgjDjkuSH2s5JBPf?p=preview (Terima kasih - VicJordan)
sumber
tbody
diinisialisasi hanya sekali, tetapitr
setiap kali daftar difilter, mengakibatkan jumlah yang salah$scope
Ini solusi saya
filter khusus yang manis dan sederhana:
(tetapi hanya terkait dengan jumlah nilai sederhana, bukan jumlah produk, saya telah membuat
sumProduct
filter dan menambahkannya sebagai edit pada posting ini).JS Fiddle
EDIT: sumProduct
Ini adalah
sumProduct
filter, ini menerima sejumlah argumen. Sebagai argumen, ia menerima nama properti dari data masukan, dan dapat menangani properti bersarang (bersarang ditandai dengan titik :)property.nested
;inilah JS Fiddle dan kodenya
JS Fiddle
sumber
Solusi Sederhana
Inilah solusi sederhana. Tidak diperlukan loop tambahan.
Bagian HTML
Bagian Script
sumber
Cara lain untuk menyelesaikan ini, memperluas dari jawaban Vaclav untuk menyelesaikan perhitungan khusus ini - yaitu perhitungan pada setiap baris.
Untuk melakukan ini dengan kalkulasi, cukup tambahkan fungsi kalkulasi ke ruang lingkup Anda, mis
Anda akan menggunakannya
{{ datas|total:calcItemTotal|currency }}
dalam kode HTML Anda. Ini memiliki keuntungan karena tidak dipanggil untuk setiap intisari, karena menggunakan filter, dan dapat digunakan untuk total sederhana atau kompleks.JSFiddle
sumber
Ini adalah cara sederhana untuk melakukan ini dengan ng-repeat dan ng-init untuk menggabungkan semua nilai dan memperluas model dengan properti item.total.
Direktif ngInit memanggil fungsi total yang ditetapkan untuk setiap item. Fungsi setTotals di pengontrol menghitung setiap total item. Ini juga menggunakan variabel lingkup invoiceCount dan invoiceTotal untuk menggabungkan (jumlah) kuantitas dan total untuk semua item.
untuk informasi lebih lanjut dan demo lihat tautan ini:
http://www.ozkary.com/2015/06/angularjs-calculate-totals-using.html
sumber
Saya lebih suka solusi elegan
Di Template
Di Controller
Jika Anda menggunakan ES2015 (alias ES6)
sumber
Anda bisa menggunakan filter Angular kustom yang mengambil array objek set data dan kunci di setiap objek untuk dijumlahkan. Filter kemudian dapat mengembalikan jumlah:
Kemudian di tabel Anda untuk menjumlahkan kolom, Anda dapat menggunakan:
sumber
Anda dapat mencoba menggunakan layanan angular js, ini berhasil untuk saya..memberikan cuplikan kode di bawah ini
Kode pengontrol:
Kode Layanan:
sumber
inilah solusi saya untuk masalah ini:
naskah
mengurangi akan mengeksekusi untuk setiap produk dalam larik produk. Akumulator adalah jumlah total yang terakumulasi, currentValue adalah elemen array saat ini dan 0 di terakhir adalah nilai awal
sumber
Saya memperluas sedikit jawaban RajaShilpa. Anda dapat menggunakan sintaks seperti:
sehingga Anda bisa mengakses objek anak suatu objek. Berikut kode untuk filter tersebut:
sumber
Mengambil jawaban Vaclav dan membuatnya lebih seperti Angular:
Ini memberi Anda keuntungan bahkan dengan mengakses data bersarang dan array:
sumber
Dalam html
dalam javascript
sumber
Jawaban Huy Nguyen hampir sampai. Untuk membuatnya berhasil, tambahkan:
... ke baris ng-init. Daftar selalu memiliki satu item, jadi Angular akan mengulangi blok tersebut tepat satu kali.
Demo Zybnek menggunakan pemfilteran dapat berfungsi dengan menambahkan:
Lihat http://plnkr.co/edit/dLSntiy8EyahZ0upDpgy?p=preview .
sumber
sumber
Ini solusi saya
Ini mengharuskan Anda untuk menambahkan nama ke pengontrol
Controller as SomeName
sehingga kami dapat menyimpan variabel di sana (apakah benar-benar diperlukan? Saya tidak terbiasa menggunakan $ parent jadi saya tidak tahu)Kemudian untuk setiap pengulangan, tambahkan
ng-init"SomeName.SumVariable = ($first ? 0 : SomeName.SumVariable) + repeatValue"
$first
untuk memeriksanya terlebih dahulu kemudian disetel ulang ke nol, jika tidak maka akan melanjutkan nilai agregathttp://jsfiddle.net/thainayu/harcv74f/
sumber
Setelah membaca semua jawaban di sini - cara meringkas informasi yang dikelompokkan, saya memutuskan untuk melewatkan semuanya dan hanya memuat salah satu pustaka javascript SQL. Saya menggunakan alasql, ya dibutuhkan beberapa detik lebih lama pada waktu muat tetapi menghemat banyak waktu dalam pengkodean dan debugging, Sekarang untuk mengelompokkan dan menjumlahkan () saya hanya menggunakan,
Saya tahu ini terdengar seperti sedikit kata-kata kasar tentang angular / js tetapi benar-benar SQL menyelesaikan ini 30+ tahun yang lalu dan kita tidak perlu menemukannya kembali dalam browser.
sumber