2014-10-07 27 views
19

Belki birileri bana küçük bir sorunla yardımcı olabilir. Web programlama alanında oldukça yeniyim, fakat programlama deneyimim var. Angularjs ve ui-grid kullanan küçük bir web sitesi geliştirmek istiyorum. Ne yazık ki filtreleme harici giriş alanlarından çalışmıyor.Angularjs ui-grid Metin giriş alanından filtre

Birisi bana programlama hatamın nerede olduğunu söyleyebilir mi?

kod

burada bulunabilir: http://plnkr.co/edit/fiA666OzpBqpTrCiuXER?p=preview

var myDummyData = [{name: "Moroni", age: 50}, 
     {name: "Tiancum", age: 43}, 
     {name: "Jacob", age: 27}, 
     {name: "Nephi", age: 29}, 
     {name: "Enos", age: 34}]; 
    var myDummyData2 = [{name: "aTest", age: 50}, 
     {name: "bTest1", age: 43}, 
     {name: "cTest2", age: 27}, 
     {name: "dTest3", age: 29}, 
     {name: "eTest4", age: 34}]; 

    $scope.filterOptions = { 
     filterText: '' 
    }; 

    $scope.gridOpts = { 
     data: myDummyData, 
     enableFiltering: true, 
     columnDefs: [ 
        {name: 'Name', field: 'name', enableFiltering: true 
         , filter: { 
          term: $scope.filterOptions.filterText //DOES NOT WORK... BUT WHY 
         } 
        }, 
        {name: 'Price', field: 'age'} 
       ] 
    }; 


    $scope.updateData = function(newValue){ 
     //console.log($scope.gridOpts.data); 

     console.log($scope.gridOpts.columnDefs[0].filter); 
     $scope.gridOpts.columnDefs[0].filter = {term: newValue}; 
     console.log("Scope nameid set " + $scope.gridOpts.columnDefs[0].filter.term); //is set but no update 
     //$scope.$apply(); //not possible gives error! WHY?? 


     //$scope.gridOpts.data = myDummyData; //for testing works 
    }; 


    $scope.swapData = function() { 
     if ($scope.gridOpts.data === myDummyData) { 
      $scope.gridOpts.data = myDummyData2; 
     } 
     else { 
      $scope.gridOpts.data = myDummyData; 
     } 
    }; 

    //DOES NOT WORK BUT WHY 
//  $scope.$watch('filterOptions.filterText', function (newValue, oldValue) { 
//   if ($scope.filterOptions.filterText) { 
//    $scope.filteringText = newValue; 
//    $scope.updateData(newValue); 
//   } 
//  }); 

fikri arama alanını içeren bir gezinti çubuğu sahip olmaktır. Daha sonra diğer sütunlardaki rangesliderlere bağlı olarak filtrelemek istiyorum. Ancak standart dizge filtreleme bile örneğimde çalışmıyor.

Sorular: benim şimdiki sorunun nerede olduğunu

  1. biri bana söyleyebilir misiniz? Daha spesifik olarak: Harici giriş alanlarından filtreleme neden çalışmıyor?
  2. Diğer soru, aralık kaydırıcılarının minimum ve maksimum değerlerini ör. örneğimde yaş sütunu mu?

Cevapları etrafına baktı (doğrudan (1) Söz konusu bağlanma sorunu ile ilgili), ancak bu doğrudan ben, sadece programlama js sorunu kavramak olamayacağını bağlayıcı bir sorun ya da bir ngGrid güncelleme ya UI-ızgara problemi. Eğer etrafında bir iş biraz yapmak zorunda

Şimdiden teşekkürler

+1

Bunun bir ui-grid problemi olduğunu anladım. Ya da benim yorumumu. – cojack20

cevap

17

ilk sorunun cevabı içinde bir sürü, gerçekten, UI-Izgara için küresel bir arama seçeneği yapılmış henüz yok. Sütun filtrelerinin çalışmasının geçerli yolu, bir değişiklik için sütun filtresi girdi alanını açısal olarak izler ve kutuya yazdığınızda filtresini yeniler. Bu nedenle, bu giriş kutusunu değişiklik olayını tetiklemeye zorlamadığınız sürece filtreniz geçerli olmaz. Çözüm, yalnızca verileri filtrelemek ve yeniden yüklemek içindir. Örneğin:

HTML giriş Arama kutusuna

, yenilenmeye senin app.js sonra

<input ng-model="searchText" ng-change="refreshData()" placeholder="Search..."> 

eklemek

$scope.refreshData = function() { 
    $scope.myGrid.data = $filter('filter')($scope.data, $scope.searchText); 
}; 

oh ve $ filtre eklemek unutma senin kontrolörü

app.controller('myController', function($scope, $filter) {} 

Örneğinizi çıkardım ve bu geçici çözümle değiştirdim. Buradan kontrol edin: http://plnkr.co/edit/Tr9cNm0lDy62dmF7LNlr?p=preview

+0

Harika Yanıt. Bunu sütunlara özel yapmak mümkün mü? Benim için bir arama ve fiyat için başka bir arama ile 2 giriş arama kutuları var gibi. –

+0

UI-grid için yeni olduğumdan, hangisinin daha fazla "uygun" olduğundan emin değilim (ve yerleşik şeylerle uğraşma olasılığı daha azdır) ama her satırda "görünür" bayrak ayarlayarak bunu ele alıyorum Arama sütunlarımdaki herhangi biriyle eşleşmiyorsa false. ui-grid bayrağa saygı duyuyor gibi görünüyor. Sadece alternatif bir çözüm sunmak istedim – thynctank

+1

Bir sorum var. Halihazırda bulunan filtreler için metni almaya çalışıyorum. Yeni bir tane oluşturmak yerine mevcut filtrelerde giriş metnini yakalamak istiyorum. – JEuvin

3

bu deneyin:

$scope.gridOpts = { 
    data: myDummyData, 
    enableFiltering: true, 
    columnDefs: [ 
       {name: 'Name', field: 'name', enableFiltering: true 
        , filter: { 
         noTerm: true, 
         condition: function(searchTerm, cellValue) { 
          return (cellValue+"" === $scope.filterOptions.filterText+""); 
         } 
        } 
       }, 
       {name: 'Price', field: 'age'} 
      ] 
}; 

giriş kutusu için: giriş ng model = "SEARCHTEXT" ng-değişim = tutucu = "Ara "refresh()" .. ."

$scope.refresh = function() 
{ 
    $scope.gridApi.core.refresh(); 
} 

ben çalışır umut ...

+1

gridApi.core.refresh() bana yardımcı oldu. Teşekkürler! – TwitchBronBron

İlgili konular