Pytanie Używając Jquery wewnątrz dyrektywy AngularJS dobry czy zły pomysł?


Poniżej możesz zobaczyć mój kod dyrektywy.

Moje pytanie brzmi: "Czy mogę używać jquery z dyrektywami? Czy to dobry pomysł? Jeśli nie, dlaczego?"

outsource.directive('dedicated', function(){

        return {
           restrict: 'E',
           link: function(scope, element, attribute){

                 $("#klik").click(function(){
                    alert('works');
                 });

           },

           replace: true,
           templateUrl: 'src/app/components/views/dedicated-prices.html'
        };
    });

P.s ten kod działa.


11
2018-06-03 09:26


pochodzenie


To zależy tylko od tego, ile chcesz "uciec" jQuery. Widziałem na wielu tematach SO, że ludzie bardziej lubią wybrać AngularJS  lub  jQuery, ale nie jedno i drugie. Dodawanie jQuery reżyserowanie nie jest takie złe (nie jest to najlepszy wybór), ale dodaje kolejną zależność ... - Jovan Perovic


Odpowiedzi:


Nie powinieneś używać jquery, ponieważ Angular ma jaśniejszą wersję, znaną jako jqlite.

Więcej dokumentacji na JQLITE

Twoja dyrektywa powinna wyglądać tak:

outsource.directive('dedicated', function(){

    return {
       restrict: 'E',
       link: function(scope, element, attribute){

             var elem = angular.element(document.querySelector('#klik'))
             angular.element(elem).triggerHandler('click');

       },

       replace: true,
       templateUrl: 'src/app/components/views/dedicated-prices.html'
    };
});

6
2018-06-03 09:31



Możesz użyć albo lub. To nie powinno stanowić problemu, więc to zależy od ciebie, jeśli wybierzesz jqLite lub jQuery - Lau
Czy istnieje bardziej szczegółowa dokumentacja lub przykłady dotyczące jqlite w Internecie? A może książka? - Vesko Vujovic
ng-book to zdecydowanie pierwszy przystanek, który bym zasugerował. Pozwól mi znaleźć linki do youtube dla Ciebie - V31
Link do youtube: youtube.com/watch?v=kOtXHs1EISw - V31
Dziękuję za Twoją rekomendację fot tej książce, widziałem jej zawartość i wygląda na bardzo przydatną. Jeszcze raz dzięki - Vesko Vujovic


Prosta odpowiedź: TAK (Po prostu wywołaj jquery.js powyżej Angular.js na stronie HTML. JqLite zostanie zastąpiony przez jQuery)

Używałbyś jQuery do manipulacji DOM i jest wiele dyskusji na ten temat (czy używać w nowoczesnych przeglądarkach).

Jeden z popularnych postów w ostatnich dniach: http://lea.verou.me/2015/04/jquery-considered-harmful/

Mimo wszystko, jQuery jest nadal bardzo popularną, wysoko wykorzystywaną biblioteką DOM. A także bezproblemowo współpracuje z wieloma nowoczesnymi frameworkami UI.


2
2018-06-03 09:59



Dobry pomysł czy zły pomysł? - technophyle
Jquery jest dobrą biblioteką do manipulacji Domem. Nie czuję się źle w używaniu go. A projekty, które pracowałem, używają Jquery z plikiem angular.js - Navaneeth
jest to zdecydowanie zły pomysł, po roku doświadczeń w Angular jest to zły, zły pomysł .... (użyj jquery z kanciastym) tylko jeśli potrzebujesz jakiegoś suwaka, którego nie możesz znaleźć w kanciastym - Vesko Vujovic
@VeskoVujovic Nigdy tego nie czułem. Używamy Jquery szeroko z kanciastą. Jquery to tylko część widoku. Działa płynnie. Jedną z rzeczy, których nie zachęcam zbyt wiele, jest używanie elementów interfejsu UI zbudowanych z Jquery liek Jquery ui i owijanie rzeczy po kątem. Musimy wypełnić lukę między nieokreślonym kodem a kodem kanciastym - Navaneeth
Wszystko można zrobić bez użycia jquery z kątową aplikacją jqlite rozwiązuje wszystko ... W 1% trzeba będzie użyć jquery. Zgadzam się na używanie jquery ui compoents z Angular ... - Vesko Vujovic


Interesujące pytanie. Mam jquery z wyborem elementów w niektórych dyrektywach / kontrolerach w mojej bazie kodu.

Zawsze czuję się z tego powodu brudny i robię to tylko wtedy, gdy naprawdę tego potrzebuję, niestety jest to prawie zawsze bomba zegarowa i prowadzi mnie do przeklinania siebie kilka miesięcy później i refaktoryzacji, by użyć bardziej anglojęzycznej metody.

Spójrz jeszcze raz, aby sprawdzić, czy istnieje wrodzony sposób robienia tego, co chcesz zrobić, nie pożałujesz!


1
2018-06-03 09:43