22

Sto cercando di utilizzare webpack + semantica UI con Vue.js e ho trovato questa libreria https://vueui.github.io/Uso vue.js con semantica UI

Ma non c'era problema compling:

ERROR in ./~/vue-ui/components/sidebar/sidebar.jade 
Module parse failed: /Project/node_modules/vue-  
ui/components/sidebar/sidebar.jade Unexpected token (1:24) 
You may need an appropriate loader to handle this file type. 

Così ho installato giada (pug) ma ancora senza fortuna.

E non c'è commento a github per quella lib:

WIP, non utilizzare (https://github.com/vueui/vue-ui)

Sono riuscito a importare css semantica nei miei modelli come questo:

@import './assets/libs/semantic/dist/semantic.min.css'; 

Ma il problema qui è che non posso usare le funzioni semantic.js come il dimmer e altre cose.

Il fatto è che ho già un vecchio codice scritto con semantica e sarebbe opportuno non utilizzare nessun altro css framework (bootstrap o materialize).

C'è un modo elegante per includere l'interfaccia utente semantica nel mio progetto vue.js?

risposta

30

1) Installare jQuery se non è installato (correttamente):!

  • npm install --save jquery
  • poi nella vostra webpack.config di file (ho appena aggiunto in webpack.dev.config .js, ma forse aggiungerlo nel file di configurazione prod):

    nei plugin aggiungere un new webpack.ProvidePlugin

    new webpack.ProvidePlugin({ 
        // jquery 
        $: 'jquery', 
        jQuery: 'jquery', 
        'window.jQuery': 'jquery' 
    }) 
    

    Ora jQuery è disponibile per TUTTA l'applicazione e i componenti.

la cosa buona è questo ora è lo stesso processo per tutte le vostre librerie esterne che si desidera utilizzare (in numeri, Moment, ecc ..), e, naturalmente, semantica-ui! Go

Let:

  • npm install --save semantic-ui-css

nb: è possibile utilizzare il repo principale (cioè semantico-ui), ma semantico-ui-css è il tema base per semantico-ui.

Quindi, ora, è necessario, in primo luogo, definire Alias ​​nel file webpack.base.config.js di file:

sotto resolve.alias aggiungere l'alias per semantica:

resolve: { 
    extensions: ['', '.js', '.vue'], 
    fallback: [path.join(__dirname, '../node_modules')], 
    alias: { 
     'src': path.resolve(__dirname, '../src'), 
     'assets': path.resolve(__dirname, '../src/assets'), 
     'components': path.resolve(__dirname, '../src/components'), 
     // adding our externals libs 
     'semantic': path.resolve(__dirname, '../node_modules/semantic-ui-css/semantic.min.js') 
    } 
    } 

nb: che ci può mettere gli altri libs alias esterni:

// adding our externals libs 
     'moment': path.resolve(__dirname, '../node_modules/moment/min/moment-with-locales.js'), 
     'numeral': path.resolve(__dirname, '../node_modules/numeral/min/numeral.min.js'), 
     'gridster': path.resolve(__dirname, '../node_modules/gridster/dist/jquery.gridster.min.js'), 
     'semantic': path.resolve(__dirname, '../node_modules/semantic-ui-css/semantic.min.js'), 
     'stapes': path.resolve(__dirname, '../node_modules/stapes/stapes.min.js') 

nb: usare il tuo proprio percorso lì (normalmente dovrebbero assomigliare a quelli!)

... stiamo per finire ...

passo successivo è quello di aggiungere il riferimento alias del provider di plugin, come abbiamo appena facciamo per jQuery =)

new webpack.ProvidePlugin({ 
     // jquery 
     $: 'jquery', 
     jQuery: 'jquery', 
     'window.jQuery': 'jquery', 
     // semantic-ui | TODO : is usefull since we import it 
     semantic: 'semantic-ui-css', 
     Semantic: 'semantic-ui-css', 
     'semantic-ui': 'semantic-ui-css' 
}) 

nb: qui io uso diversi nomi, forse semantica è sufficiente solo ;-)

Anche in questo caso, è possibile aggiungere i lib/alias lì:

new webpack.ProvidePlugin({ 
     // jquery 
     $: 'jquery', 
     jQuery: 'jquery', 
     'window.jQuery': 'jquery', 
     // gridster 
     gridster: 'gridster', 
     Gridster: 'gridster', 
     // highcharts 
     highcharts: 'highcharts', 
     Highcharts: 'highcharts', 
     // semantic-ui | TODO : is usefull since we import it 
     semantic: 'semantic-ui-css', 
     Semantic: 'semantic-ui-css', 
     'semantic-ui': 'semantic-ui-css', 
     // Moment 
     moment: 'moment', 
     Moment: 'moment', 
     // Numeral 
     numeral: 'numeral', 
     Numeral: 'numeral', 
     // lodash 
     '_': 'lodash', 
     'lodash': 'lodash', 
     'Lodash': 'lodash', 
     // stapes 
     stapes: 'stapes', 
     Stapes: 'stapes' 
    }) 

Ecco tutte le librerie esterne che sto utilizzando nel mio progetto (si può vedere gridster, che è un plugin jQuery - come semantico-ui è!)

Così ora, solo un'ultima cosa da fare:

  • aggiungere css semantica:

    faccio questo con l'aggiunta di questa linea, all'inizio degli main.js di file:

    import '../node_modules/semantic-ui-css/semantic.min.css'

Poi, dopo questa riga aggiungere:

import semantic from 'semantic'

Ora è possibile utilizzarlo.

Esempio nel mio file Vuejs:

<div class="dimension-list-item"> 
    <div class="ui toggle checkbox" 
    :class="{ disabled : item.disabled }"> 
     <input type="checkbox" 
     v-model="item.selected" 
     :id="item.id" 
     :disabled="item.disabled"> 
     <label :class="{disabled : item.disabled}" :for="item.id">{{item.label}}/{{item.selected}}</label> 
    </div> 
</div> 

Questo frammento creare una cella semplice per una lista con una casella di controllo.

E nello script:

export default { 
    props: ['item'], 
    ready() {  
    $(this.$el.childNodes[1]).checkbox() 
    } 
} 

Ecco il risultato:

sample1

sample2

Normalmente, tutti dovrebbero funziona bene.

Ho appena iniziato a svilupparsi con Vuejs settimana scorsa, quindi, forse c'è è un modo migliore per a quella ;-)

+0

non funziona per me, :( – dylan

+0

non dovrebbe la ProvidePlugin e l'alias semantico ui ha lo stesso nome? In ogni caso, semantic-ui viene importato qui come oggetto vuoto, non ha funzionato –

+0

Bene, il file semantico-ui js è tornato come oggetto vuoto qui. Suggerimenti? –

0
  1. Installare jquery npm install jquery
  2. Installare semantico-ui -css npm install semantic-ui-css
  3. Aggiungi questo main.js

window.$ = window.jQuery = require('jquery') require('semantic-ui-css/semantic.css') require('semantic-ui-css/semantic.js')

+0

l'eccezione è scomparsa, ma ho trovato tutto il semantic-ui js non funziona, ad esempio, c'è un menu nella mia pagina, posso vedere l'effetto css, ma quando provo a fare clic su alcuni elementi, non è successo nulla – Allen4Tech

1

Un po 'in ritardo, ma ora è possibile utilizzare questo: https://github.com/Semantic-UI-Vue/Semantic-UI-Vue. Ancora WIP ma ha tutte le funzionalità di base.

Abbastanza facile da usare:

import Vue form 'vue'; 
import SuiVue from 'semantic-ui-vue'; 

/* ... */ 

Vue.use(SuiVue); 

var app = new Vue({ 
    el: '#app', 
    data: { 
    message: 'Hello Vue!' 
    }, 
    template: '<sui-button primary>{{message}}</sui-button>' 
}); 

Le API sono molto simili alla versione React: se è stato utilizzato, questo sarà molto familiare.

Ecco un JSFiddle se si vuole giocare: https://jsfiddle.net/pvjvekce/

Disclaimer: io sono il creatore