2014-11-25 26 views
12

ui-grid ürününe yeni kayıt yapıyorum ve aşağıdaki resimde gösterildiği gibi AngularJS'de bir tablo uygulamaya çalışıyorum. Bir satır seçmeye çalışıyorum ve o satırdaki silme tuşunu kullanarak siliyorum. ui-grid belgeleri, gridApi'u kullanmamızı gerektirir, ancak bunlar için yeterli belge bulamıyorum.Açısal JS UI-Grid Sil Satır

enter image description here

cevap

2

Sadece ek yeri kullanılarak ui-ızgaralar veri kaynağı modelinden silmek istediğiniz satırı kaldırın. Örneğin

$scope.myGridOptions.data.splice(<YOUR ROW INDEX HERE>, 1); 
+0

bir satır sildikten sonra ızgaranın endeks dizinin indeksi ile güncelleme etmez. Bu nedenle, geri kalan satırları silemiyorum. Ui-grid'de refreshRows() yöntemi şu an çalışmıyor. – Sur

+0

İndeks olarak neler kullanıyorsunuz? – Thanos

+0

Ui-grid ile ilgili olarak, üzerinde çalıştığınız versiyonu daima belirtmelisiniz. – nabinca

14

burada bir satır silmek için nasıl bir çalışma örnek bakınız. http://plnkr.co/edit/6TiFC6plEMJMD4U6QmyS?p=preview

anahtarı dinamik olarak güncellenen almaz gibi row.index dayanarak indexOf(row.entity) değil kullanmaktır.

$scope.deleteRow = function(row) { 
    var index = $scope.gridOptions.data.indexOf(row.entity); 
    $scope.gridOptions.data.splice(index, 1); 
}; 

Jenerik yaklaşım

function deleteRow(row,grid) { 
    var i = grid.options.data.indexOf(row.entity); 
    grid.options.data.splice(i, 1); 
} 
+2

Örneğinizi iki kez kontrol etmek isteyebilirsiniz. Bugün benim için çalışmıyordu ve bir ton hata atıyor."Row.index" için – Geuis

+2

+1 ve row.identity'nin dinamik olarak güncelleştirmediği ayrıntılar. Bu benim kodumla ilgiliydi ve kafamı birkaç saatliğine çarptı. Teşekkürler! –

+0

@Geuis güncellenmiş örnek – Blowsie

3

Biz $ scope.grid.appScope kullanmak gerekir. Tüm şablonlarda mevcuttur. Bunun yanı sıra, satır nesnesini şablondan göndermeniz gerekir, böylece satırları ızgara verilerinden silebilirsiniz.

jsfiddle: Burada sağlanan http://jsfiddle.net/3ryLqa9e/4/

cellTemplate:'<button class="btn primary" ng-click="grid.appScope.Delete(row)">Delete Me</button>' 

    $scope.Delete = function(row) { 
      var index = $scope.gridOptions.data.indexOf(row.entity); 
      $scope.gridOptions.data.splice(index, 1); 
     }; 
3

diğer çözümler (çünkü ui-ızgaranın benim son farklı versiyonu olabilir) benim için çalıştı olmadı. Yani kapsam dizisinden eleman çıkarmak benim için çalıştı. Bu, ui-grid'in diğer sürümleriyle bile çalışmalıdır, çünkü veri değiştiğinde grid güncellenmelidir. (Açısal sayesinde !!!) Burada diziden eleman çıkarmak ve lodash kullanıyorum

örnek kod:

$scope.deleteRow = function(row){ 
    _.remove($scope.gridData, { 
     id: row.id 
    }); 
}; 
+0

Beni işaretlemek için teşekkürler. –

+0

Bununla devam ettim, ancak "showGridFooter: true" kullanırken satır, tablo altbilgisinde "Seçili Öğeler: xxx" iletisinde sayılır. –

4
Sen yeni API adapte kadarıyla @Blousie çözümü kullanabilirsiniz

: "Grid.appScope.edit (row.entity)", kapsamınızın "düzenleme" işlevine erişebilmenizi sağlar. Böyle

şey:

var removeTemplate = '<button class="btn btn-danger" ng-click="grid.appScope.removeRow(row)"><i class="glyphicon glyphicon-remove"></i></button>'; 

$scope.removeRow = function(row) { 
    var index = $scope.<yourDataModelProperty>.indexOf(row.entity); 
    if (index !== -1) { 
     $scope.<yourDataModelProperty>.splice(index, 1); 
    } 
};