{"id":230297,"date":"2022-12-07T11:44:00","date_gmt":"2022-12-07T08:44:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230297"},"modified":"2022-12-07T11:49:01","modified_gmt":"2022-12-07T08:49:01","slug":"nurgasuendmuste-kaeivitamine-jquery-abil","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/et\/nurgasuendmuste-kaeivitamine-jquery-abil\/","title":{"rendered":"Nurgas\u00fcndmuste k\u00e4ivitamine jQuery abil"},"content":{"rendered":"\n<p>\u00dcks asi, mis mulle WordPressiga t\u00f6\u00f6tamisel meeldib, on v\u00f5imalus kaasata kolmandate osapoolte teeke ja t\u00f6\u00f6riistu, millega t\u00f6\u00f6tada.<\/p>\n<p>See ei t\u00e4henda, et nad ei tuleks ilma oma \u00f5ppimisk\u00f5verata (nad k\u00f5ik teevad, eks?), kuid sageli on l\u00f5bus \u2013 ehkki kohati masendav \u2013 oma tegemistega kaasata ja seej\u00e4rel sellega manipuleerida.<\/p>\n<p>Mis puutub kolmandate osapoolte tehnoloogiatesse, siis olen n\u00e4inud, et inimesed toovad WordPressiga kaasa selliseid asju nagu <strong><a href=\"https:\/\/packagist.org\/packages\/withfatpanda\/illuminate-wordpress\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Laravel Illuminate<\/a><\/strong>.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-162460-61e73f54b1a2e.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-162460-61e73f54b1a2e.png\" alt=\"Nurgas\u00fcndmuste k\u00e4ivitamine jQuery abil\" ><\/a><\/p>\n<p>Ja ma tean, et eriti viimastel aastatel on paljud sisse toonud selliseid komponente nagu <strong><a href=\"https:\/\/reactjs.org\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">React<\/a><\/strong> ja <strong><a href=\"https:\/\/vuejs.org\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Vue<\/a><\/strong>.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-162460-61e73f5876c07.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-162460-61e73f5876c07.png\" alt=\"Nurgas\u00fcndmuste k\u00e4ivitamine jQuery abil\" ><\/a><\/p>\n<p>\u00dchel sellisel juhul olen Angulariga veidi t\u00f6\u00f6d <strong><a href=\"https:\/\/angular.io\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">teinud<\/a><\/strong>. Ja kui olete harjunud ES6, vanilje JavaScripti v\u00f5i jQuery kasutamisega, v\u00f5ib Angular s\u00fcndmuste k\u00e4ivitamine jQueryga alguses tunduda pisut veider.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-162460-61e73f5cad032.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-162460-61e73f5cad032.png\" alt=\"Nurgas\u00fcndmuste k\u00e4ivitamine jQuery abil\" ><\/a><\/p>\n<p>Kuid kui m\u00f5istate m\u00e4rgistust ja seda, kuidas Angular oma s\u00fcndmusi k\u00e4sitleb, pole see nii hull.<\/p>\n<h2>Nurgas\u00fcndmuste k\u00e4ivitamine jQuery abil<\/h2>\n<p>Angular t\u00f6\u00f6tab jQueryst pisut erinevalt selle poolest, kuidas see DOM-iga suhtleb, kui s\u00fcndmus juhtub.<\/p>\n<p>N\u00e4iteks oletame, et jQuery (v\u00f5i isegi vanilje JavaScripti) kasutamisel on meil leht ja sellel lehel on m\u00e4rgistus, mis v\u00f5ib sisaldada mitmesuguseid elemente. Need v\u00f5ivad olla:<\/p>\n<ul>\n<li>pealkirjad,<\/li>\n<li>l\u00f5igud,<\/li>\n<li>sildid,<\/li>\n<li>vali elemente,<\/li>\n<li>ja nii edasi.<\/li>\n<\/ul>\n<p>jQueryga oleme harjunud tegema midagi sellist:<\/p>\n<ol>\n<li>leida element, millega tahame t\u00f6\u00f6tada kas ID, klassi nime v\u00f5i m\u00f5ne muu atribuudi kaudu,<\/li>\n<li>kuulata s\u00fcndmust,<\/li>\n<li>asjakohaselt reageerida.<\/li>\n<\/ol>\n<p>M\u00f5nede jQuery uuemate funktsioonide t\u00f5ttu saame m\u00e4\u00e4ratleda kohandatud s\u00fcndmusi ja seej\u00e4rel seadistada kuulajaid ning neid asjakohaselt k\u00e4sitleda, kuid \u00fcldine k\u00e4itumine on endiselt sama.<\/p>\n<p>Angular t\u00f6\u00f6tab siiski veidi teisiti.<\/p>\n<p>Et see oleks arusaadav (sest pidage meeles, et ma lihtsalt \u00fcritan jQuery abil nurgeliste s\u00fcndmuste k\u00e4ivitamise praktilist protsessi l\u00e4bi viia), on Angularil m\u00e4rgistus sarnaselt k\u00f5igi tavaliste HTML-dokumentidega, v\u00e4lja arvatud erandiga.<\/p>\n<p>Nimelt juhivad mis tahes nurgap\u00f5hist m\u00e4rgistust kohandatud atribuudid, mille eesliide on <strong>ng.<\/strong> Need k\u00e4sivad Angularil kuulata teatud s\u00fcndmusi, kui need juhtuvad, ja kui need juhtuvad, siis tegutsema.<\/p>\n<p>N\u00e4iteks kui elemendil on atribuut, mis n\u00e4eb v\u00e4lja <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/3444d2be3556fc0c67036d5e3b2a6390#file-angular-markup-example-html\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">selline<\/a><\/strong> :<\/p>\n<pre><code>&lt;select class=\"form-control ng-pristine ng-untouched ng-valid ng-empty\" ng-model=\"item.payment_method\" ng-change=\"updatePaymentMethod(item)\" ng-options=\"method.display_name for method in paymentMethods track by method.id\"&gt;\n  &lt;!-- more to come --&gt;\n&lt;\/select&gt;<\/code><\/pre>\n<p>See t\u00e4hendab, et iga kord, kui <strong>muudatuse<\/strong> s\u00fcndmus k\u00e4ivitatakse, peab Angular k\u00e4ivitama vastava t\u00f6\u00f6tleja ja tegema k\u00f5ik, mida ta peab tegema, et tagada andmete \u00f5ige k\u00e4sitlemine.<\/p>\n<p>Kuid siin peitubki esialgne k\u00fcsimus: kuidas saame jQuery abil nurgelisi s\u00fcndmusi k\u00e4ivitada?<\/p>\n<h3>V\u00e4ike seadistus<\/h3>\n<p>Enne seda, kuidas seda teha, tahan luua <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/3444d2be3556fc0c67036d5e3b2a6390#file-angular-markup-html\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">n\u00e4idiskoodi,<\/a><\/strong> mis p\u00f5hineb Angularil, nii et oleme sellega, millest r\u00e4\u00e4gin, samal lehel:<\/p>\n<pre><code>&lt;select class=\"form-control ng-pristine ng-untouched ng-valid ng-empty\" ng-model=\"item.payment_method\" ng-change=\"updatePaymentMethod(item)\" ng-options=\"method.display_name for method in paymentMethods track by method.id\"&gt;\n  &lt;option value=\"?\"&gt;&lt;\/option&gt;\n  &lt;option value=\"1042\" selected=\"selected\"&gt;Card 1001 (01\/18)&lt;\/option&gt;\n&lt;\/select&gt;<\/code><\/pre>\n<p>L\u00fchidalt \u00f6eldes on see valik element, millel on mitmeid valikuid. Eesm\u00e4rk on kahekordne:<\/p>\n<ol>\n<li>programmiliselt muuta v\u00e4\u00e4rtust jQuery abil,<\/li>\n<li>saata teavet natiivsete nurkfunktsioonide abil.<\/li>\n<\/ol>\n<p>Piisavalt otsekohene, eks? Muidugi, kuid on m\u00f5ned asjad, mis v\u00e4\u00e4rivad t\u00e4helepanu ja ma k\u00e4sitlen neid j\u00e4rgmises jaotises.<\/p>\n<h3>N\u00fc\u00fcd jQuery juurde<\/h3>\n<p>Oletame n\u00fc\u00fcd, et teeme midagi <strong>valitud<\/strong> elementidega, kuid me ei kasuta Angulari. Selle asemel hakkame kasutama jQueryt.<\/p>\n<p>Kuid lahenduse \u00fclesehitamise viisi t\u00f5ttu ootab Angular,\u00a0 kuni DOM-is k\u00e4ivitub <strong>muudatuss\u00fcndmus<\/strong>, et raamistik saaks oma asja teha. Kuid jQuery t\u00f6\u00f6tab teisiti, eks? Selle asemel v\u00f5tab see s\u00fcndmuse, kasutab meie seadistatud tellijat ja seej\u00e4rel tegeleb sellega.<\/p>\n<p>Siin tuleb m\u00e4ngu meie t\u00f6\u00f6 Angular s\u00fcndmuste k\u00e4ivitamisel jQuery abil. Selguse huvides ei ole see nii lihtne kui koodi helistamine jQuery kaudu, <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/3444d2be3556fc0c67036d5e3b2a6390#file-jquery-change-event-js\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">nagu see<\/a><\/strong> :<\/p>\n<pre><code>$('select['ng-model=\"item.payment_method\"]').trigger('change');<\/code><\/pre>\n<p>Selle asemel saame v\u00e4\u00e4rtuse m\u00e4\u00e4rata jQuery abil, kuid siis peame \u00f5ige s\u00fcndmuste k\u00e4itleja k\u00e4ivitamiseks kasutama Angular. See on endiselt <strong>muutuste<\/strong> s\u00fcndmus, kuid see, kuidas me seda teeme, on erinev.<\/p>\n<p><strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/3444d2be3556fc0c67036d5e3b2a6390#file-angular-change-event-js\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">J\u00e4rgmises koodis<\/a><\/strong> n\u00e4ete, kus ma muudan valitud elementi, et m\u00e4\u00e4rata selle teine \u200b\u200bvalik valitud suvandiks, ja seej\u00e4rel juhendada Angular seda tegema, k\u00e4ivitades <strong>muudatuse<\/strong> s\u00fcndmuse, millega element on seotud.<\/p>\n<pre><code>$('select[ng-model=\"schedule.payment_method\"]').each(function() {\n\n  \/\/ For the purposes of this example, we're going to select the first option.\n  $(this)\n    .children('option:eq(1)')\n    .attr('selected', 'selected');\n\n  \/\/ Make sure the select element reflects the change (as setting the option doesn't always do this properly).\n  $(this).val($(this).children('option:selected').attr('value'));\n\n  \/\/ Now use the Angular API's triggerHandler function to call the change.\n  angular.element($(this)).triggerHandler('change');\n});<\/code><\/pre>\n<p>Nagu n\u00e4ete, ei erine seal palju; aga selle asemel, et kutsuda\u00a0 elemendi <a href=\"https:\/\/api.jquery.com\/trigger\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">p\u00e4\u00e4stikut<\/a> jQuery kaudu, kasutame Angulari pakutavat API-d. Ja see hoolitseb selle eest.<\/p>\n<h2>Selliste tehnikate m\u00f5istlik kasutamine<\/h2>\n<p>Ma ei ole Angular-ekspert (ega ka v\u00e4itnud, et olen), kuid kui tegemist on tugevalt muudetud kohandatud kolmanda osapoole lahendusega t\u00f6\u00f6tamisega ja minu k\u00e4sutuses olevate t\u00f6\u00f6riistadega ning aja- ja eelarvepiirangutega, on see kasulik. teada, kuidas neid asju k\u00e4sitleda.<\/p>\n<p>Nii et v\u00f5ib-olla on see teile tulevases projektis abiks.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Olen Angulariga veidi t\u00f6\u00f6d teinud. Ja kui olete harjunud ES6, vanilje JavaScripti v\u00f5i jQuery kasutamisega, v\u00f5ib Angular s\u00fcndmuste k\u00e4ivitamine jQueryga alguses tunduda pisut veider.<\/p>\n","protected":false},"author":1,"featured_media":236442,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[718,729,894],"tags":[1165],"class_list":["post-230297","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-arendaja","category-javascript-4","category-kood","tag-affiai-et"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/230297","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/comments?post=230297"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/posts\/230297\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media\/236442"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/media?parent=230297"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/categories?post=230297"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/et\/wp-json\/wp\/v2\/tags?post=230297"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}