Come caricare il file js del modulo personalizzato in magento 2?


9

Ho creato il modulo di scorrimento banner per magento 2. Ho chiamato il file JS usando i seguenti modi e il suo funzionamento bene. Nella classe di blocchi ho creato la seguente funzione

public function getBaseJs($fileName){

        return $this->_storeManager->getStore()->getBaseUrl(
                \Magento\Framework\UrlInterface::URL_TYPE_MEDIA
            ).'bannerslider/js/'.$fileName;
    }

e questa funzione viene chiamata nel bannerslider.phtmlfile come segue.

<script type="text/javascript" src="<?php echo $this->getBaseJs('jquery-1.7.min.js') ?>"></script>
<script type="text/javascript" src="<?php echo $this->getBaseJs('jquery.flexslider.js') ?>"></script>

Ma, secondo il meccanismo di dipendenza jQuery di require.jsCome posso farlo?

Risposte:


29

Alla fine ho ottenuto la soluzione per la mia query. Vorrei condividerlo nei dettagli come di seguito.

inserisci qui la descrizione dell'immagine

Passaggio 1: aggiungere il file js del modulo in<Vendor>/<Module_Name>/view/<area>/web/js/

per esempio <Vendor>/<Module_Name>/view/<area>/web/js/flexslider.js

Passaggio 2: creare il requirejs-config.jsfile in<Vendor>/<Module_Name>/view/<area>/

per esempio <Vendor>/<Module_Name>/view/<frontend>/requirejs-config.js

Aggiungi il seguente codice a requirejs-config.js

var config = {
    map: {
        '*': {
            bannerslider: 'VendorName_ModuleName/js/flexslider'
        }
    }
};

Nota: è possibile impostare il nome dell'oggetto secondo la propria scelta. Nel mio caso ho impostato come bannerslidere non aggiungo l'estensione .js al nome del file inVendorName_ModuleName/js/flexslider

Passaggio 3: chiamare il file functionjs del modulo nel .phtmlmodo seguente.

<script type="text/javascript">
    require(['jquery','bannerslider'],function($){
        $(window).load(function() {
            $('.flexslider-8').flexslider({
                animation: "fade",
                controlNav: "thumbnails",
                slideshowSpeed: 2000,
                minItems: 2,
                maxItems: 4
            });
        });

    });
</script>

Funziona bene per me.

Traccia: utilizzare la Netscheda per visualizzare l'URL richiesto del file js caricato o meno.

inserisci qui la descrizione dell'immagine


4
meglio usare "domReady!" plug-in anziché $ (finestra) .load (), ad esempio richiedono (['jquery', 'bannerslider', 'domReady!], funzione ($) {... il codice viene eseguito solo dopo il caricamento dom})
KAndy

Sì, sarà molto utile.
Praful Rajput,

@KAndy dipende, se vuoi che lo script venga eseguito per ultimo, non è meglio usare $ (finestra)? ciò non fa sì che lo script venga eseguito non solo quando viene letto DOM, ma quando vengono eseguiti tutti gli script?
Lachezar Raychev,

E in questo modo non funziona per me ... dice static / adminhtml / Magento / backend / en_US / gift.js 404 (Not Found) Ho cancellato la cache e il pub / static ... bot no ... non funziona
Lachezar Raychev,

grattalo, funziona ... domReady! non funziona però ... come posso dire a uno script da eseguire dopo che tutti gli altri script sono stati caricati o che non esiste nella metodologia magent2 attuale?
Lachezar Raychev,

4

La mia strada è:

Passo 1

Includi il file javascript di base di un'estensione usando le istruzioni di layout.

Passo 2

Richiedi gli altri file javascript dell'estensione dal file di base con RequireJS:

require(
    [
      'jquery', 
      '{VendorName}_{ModuleName}{path_to_js_file/relative_to/view/web/no_js_at_end}'
     // ex. Magento/Ui/view/base/web/js/grid/sticky/sticky.js
     // became Magento_Ui/js/grid/sticky/stick
    ], 
    function($, someOtherLibrary) {
        // custom code here...
    );
});

1
ottenuto un errore richiesto non definito, perché il mio js è caricato prima di requestjs
ragazzo semplice
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.