18

'da Önyükleme Çoklu Seçim Düşüşünü nasıl kullanabilirim? AngularJS'de Önyükleme Çok Noktalı Düşüşünü http://davidstutz.github.io/bootstrap-multiselect/ kullanmak istiyorum. Direktife taşınmanın gerekli olduğunu duydum. Ama bence bu oldukça karmaşık & ne yapmam gerektiğini bilmiyorum. Deneyimliyseniz lütfen bana rehberlik edin! Tks.AngularJS

+4

Eğer önyükleme çoklu seçim kullanmam gerekir mi, yoksa Select2 kullanabilirim? http://ivaynberg.github.io/select2/ Bu daha önce Yönlü Yönerge olarak sarılmıştır: https://github.com/angular-ui/ui-select2 – vsp

+1

ui-select2 artık kullanımdan kaldırılmıştır. Https://github.com/angular-ui/ui-select adresini kullanın. –

cevap

11

Çok tekrar kullanılabilen bir kod oluşturmanız gerekmiyorsa, aslında o kadar da karmaşık değildir. aslında sadece normal jQuery veya JS kodunun, sen yönergesi içindedir kez Temelde

angular.module('yourapp', []) 

.directive('multiselectDropdown', [function() { 
    return function(scope, element, attributes) { 

     element = $(element[0]); // Get the element as a jQuery element 

     // Below setup the dropdown: 

     element.multiselect({ 
      option1: 123, 
      option2: "abcd", 
      // etc. 
     }) 

     // Below maybe some additional setup 
    } 
}]); 

: İlk adım temel bir direktif yaratmak ve DOM elementi elde etmektir. HTML kodundaki Sonra

:

<select multiselectDropdown > 
    <option value="1">One</option> 
    <option value="2">One</option> 
    <option value="3">One</option> 
</select> 

Ayrıca DIV ilave özellikleri belirlemek ve direktifin attributes parametresini kullanarak değerler elde edebilirsiniz.

+6

Sadece bir addon olarak, bu AngularJS'ye geçmek istediğiniz tüm jquery eklentileri için mükemmel bir modeldir. 'MultiselectDropdown' 'multiselect-dropdown' olmuyor mu? –

+1

Aslında, AngularJS'in en son sürümü HTML'de yönergelerin atamasını sağlamanın birçok yolunu destekliyor, bence “çok satırlı düşme”, “multiselectdropdown”, “data-multiselect-dropdown”, “class =” multiselect-dropdown ”(ve muhtemelen daha fazlası) hepsi geçerlidir. "multiselect-dropdown" aslında "multiselectDropdown" dan daha uygun HTML olabilir. –

+0

@Laurent Üzgünüm, ama sonra ne yapacağımı gerçekten bilmiyordum: | –

16

Projemde kullanacağım bir yönerge. Chrome ve Firefox'ta çalışır. Seçenekleri kendi ihtiyacınıza göre değiştirebilirsiniz. Angularjs v1.3.15 ve önyükleme-multiselect v0.9.6 çalışan direktif

angular.module('yourApp') 
.directive('yourDirective', function() { 
    return { 
     link: function (scope, element, attrs) { 
      element.multiselect({ 
       buttonClass: 'btn', 
       buttonWidth: 'auto', 
       buttonContainer: '<div class="btn-group" />', 
       maxHeight: false, 
       buttonText: function(options) { 
        if (options.length == 0) { 
         return 'None selected <b class="caret"></b>'; 
        } 
        else if (options.length > 3) { 
         return options.length + ' selected <b class="caret"></b>'; 
        } 
        else { 
         var selected = ''; 
         options.each(function() { 
         selected += $(this).text() + ', '; 
         }); 
         return selected.substr(0, selected.length -2) + ' <b class="caret"></b>'; 
        } 
       } 
      }); 

      // Watch for any changes to the length of our select element 
      scope.$watch(function() { 
       return element[0].length; 
      }, function() { 
       element.multiselect('rebuild'); 
      }); 

      // Watch for any changes from outside the directive and refresh 
      scope.$watch(attrs.ngModel, function() { 
       element.multiselect('refresh'); 
      }); 

     } 

    }; 
}); 

Güncelleme iki parçacıkları: JavaScript, CoffeeScript

+0

Bu özellik benim için harika bir özelliktir.Firefox'da bir şey seçtikten sonra buttonText işlevi çağrıldığında, uzunluk her zaman sıfırdır, dolayısıyla gösterilen metni güncellemez. Düşünceler? –

+0

@LukeOllett Projemde hem Chrome hem de Firefox'ta çalışıyor. HTML dosyasında bazı sorunlar olabileceğini tahmin ediyorum. Seçim etiketinde 'ng-options' kullanıyorum ve' multiple''e izin veriyorum. –

+0

benimki gibi ...