рд╣рдо Svelte рдХреЗ рд▓рд┐рдП "рд╕рд╛рдордЧреНрд░реА" рдмрдЯрди рдХреЗ рд╕рд╛рде рдПрдХ рдШрдЯрдХ рд▓рд┐рдЦрддреЗ рд╣реИрдВ

SvelteJS рдХреЗ рд▓реЗрдЦреЛрдВ рд╕реЗ рдкреНрд░реЗрд░рд┐рдд: рджреВрд╕рд░реЗ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рд╡рд┐рдореЛрдЪрди, рд░реВрдкрд░реЗрдЦрд╛рдУрдВ рдХреЛ рдЫреЛрдбрд╝рдирд╛ рдФрд░ рдкреБрди: "рдЬреЗрдПрд╕ рдлреНрд░реЗрдорд╡рд░реНрдХ: рд░рд┐рдПрдХреНрдЯ, рд╡реАрдпреВ рдФрд░ рд╣рд╛рдЗрдкрд░рдПрдк рдХреА рддреБрд▓рдирд╛" , "рдЧрд╛рдпрдм" рд╕реЗрд╡реЗрд▓реНрдЯреЗ рдлреНрд░реЗрдорд╡рд░реНрдХ ("рд╕реНрд╡рд┐рдлреНрдЯ", рдЖрдк рдХрднреА рдирд╣реАрдВ рдЬрд╛рдирддреЗ ) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдореИрдВ рдпрд╣ рдХреЛрд╢рд┐рд╢ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдФрд░ рдПрдХ рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ Materialize рдХреЗ рдмрдЯрди рдХреЗ рд╕рд╛рде рдПрдХ рдЫреЛрдЯрд╛ рдШрдЯрдХ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред

рд╡рд┐рдзрд┐ рдПрдХ: рдХреНрд▓рд╛рд╕рд┐рдХ


Svelte рд╕реНрдЯрд╛рд░реНрдЯрд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рджреЛ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: рд╡реЗрдмрдкреИрдХ рдХреЗ рд╕рд╛рде рдпрд╛ рд░реЛрд▓рдЕрдк рдХреЗ рд╕рд╛рдеред рдореИрдВрдиреЗ рд╡реЗрдмрдкреИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдкрд░рд┐рдЪрд┐рдд рд╣реИред рд╕реНрдерд╛рдкрдирд╛, рд▓реЙрдиреНрдЪ - рд╕рдм рдХреБрдЫ рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣ рд╣реИ ред

рд╕рд╛рдордЧреНрд░реА рдФрд░ рдЪрд┐рд╣реНрди рд╕реЗрдЯ рдХрд░реЗрдВ:

npm install materialize-css@next npm install material-design-icons 

рд╣рдо рдЗрд╕ рд╕рдм рдХреЛ src / main.js рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:

 import 'material-design-icons/iconfont/material-icons.css'; import 'materialize-css/dist/css/materialize.min.css'; 

рдлреЛрдВрдЯ (рдФрд░ рдЕрдзрд┐рдХ) рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рд╛рдЗрд▓-рд▓реЛрдбрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:

 npm install file-loader --save-dev 

рдФрд░ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ webpack.config.js рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:

 { test: /\.(woff(2)?|ttf|eot|svg)(\?v=\d+\.\d+\.\d+)?$/, use: [{ loader: 'file-loader', options: { name: '[name].[ext]', outputPath: 'fonts/' } }] } 


рдПрдХ рдШрдЯрдХ рд▓реЗрдЦрди


рд╣рдо src / Components / Buttons.html рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рддреЗ рд╣реИрдВ - рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдШрдЯрдХ рд╣реЛрдЧрд╛ред рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ, Materialize рдмрдЯрди рдХреЗ рд▓рд┐рдП <a> рдЯреИрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╢рдмреНрджрд╛рд░реНрде рдХреЗ рд▓рд┐рдП, рджреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрдЯрди рдмрдирд╛рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛: <рдмрдЯрди> - рдпрджрд┐ рдХреЛрдИ рд▓рд┐рдВрдХ рдирд╣реАрдВ рд╣реИ, рдФрд░ <a> - рдпрджрд┐ рдХреЛрдИ рд▓рд┐рдВрдХ рд╣реИред

рд╣рдо рджреЛ рдЯреЗрдореНрдкрд▓реЗрдЯ рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВ:

 {#if href} //     <a on:click class="{classes}" {href} {title} > {#if icon} //     <i class="material-icons {iconAlign}">{icon}</i> {/if} <slot>button</slot> </a> {:else} <button on:click class="{classes}" {type} {name} {disabled} > {#if icon} <i class="material-icons {iconAlign}">{icon}</i> {/if} <slot>button</slot> </button> {/if} 

рдпрд╣рд╛рдБ {classes} рд╡рд░реНрдЧреЛрдВ рдХреА рд╕реВрдЪреА рд╣реИ, {href}, {title}, {type}, {name}, {рд╡рд┐рдХрд▓рд╛рдВрдЧ} рдЗрд╕рдХреЗ рд╕рдВрдмрдВрдзрд┐рдд рдЧреБрдг рд╣реИрдВ, рдФрд░ {iconAlign} рдФрд░ {icon} рдЖрдЗрдХрди рдХреА рд╕реНрдерд┐рддрд┐ рдФрд░ рдирд╛рдо рд╣реИрдВред рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЕрдиреНрдп (рд╡рд╣рд╛рдВ, рдореВрд▓ рд░реВрдк рд╕реЗ, рд╡рд┐рджреЗрд╢реА рдмрдиреЗ рд╣реБрдП рд╣реИрдВ), рд▓реЗрдХрд┐рди рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдФрд░ рдЬреЛрдбрд╝реЗрдВ: рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рддрд╛рдХрд┐ рдлрд┐рд░ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдкрдХрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдПред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдиреАрдЪреЗ рд╣реЛрдЧрд╛ред

рдЕрдЧрд▓рд╛, <script> рдЕрдиреБрднрд╛рдЧ рдореЗрдВ, рд╣рдо рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдбреЗрдЯрд╛ рдФрд░ рдХреНрд▓рд╛рд╕реЗрд╕ (рдЧрдгрдирд╛) рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реБрдП рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ:

  export default { data() { return { color: '', size: '', iconAlign: 'left', floating: false, flat: false, waves: false, wavesColor: 'light', icon: '', //   type: '',//    href: '', name: '', disabled: false, title: '' }; }, computed: { //     classes: ({ //  ,      color, size, floating, flat, disabled, waves, wavesColor }) => { const classes = []; flat ? classes.push(`btn-flat`) : classes.push(`btn`); floating && classes.push(`btn-floating`); disabled && classes.push(`disabled`); waves && classes.push(`waves-effect`); wavesColor && classes.push(`waves-${wavesColor}`); size && classes.push(`btn-${size}`); color && classes.push(`${color}`); return classes.join(' '); } } }; 

рдбреЗрдЯрд╛ () рдЕрдиреБрднрд╛рдЧ рдореЗрдВ, рд╣рдо рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдбреЗрдЯрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЧрдгрдирд╛ рдореЗрдВ , рд╣рдо рдЧреБрдгреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╡рд░реНрдЧреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдХреЛ рднрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╣рдо рдмрдЯрди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдкрд░ рдкрд╛рд░рд┐рдд рдХрд░реЗрдВрдЧреЗред рдФрд░ рдЬрдм рдЖрдк рдЗрди рдЧреБрдгреЛрдВ рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВ, рддреЛ рд╕рдм рдХреБрдЫ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкреБрдирд░реНрдЧрдгрдирд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред P рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рддреНрдордХрддрд╛ рд╣реИред

рджрд░рдЕрд╕рд▓, рдШрдЯрдХ рддреИрдпрд╛рд░ рд╣реИред Src / App.html рдореЗрдВ рд╣рдо рдЗрд╕реЗ рд╢рд╛рдорд┐рд▓ рдХрд░рддреЗ рд╣реИрдВ:

 <script> import Button from './components/Buttons.html'; export default { components: { Button } }; </script> 


рд╣рдо рдПрдХрддреНрд░рд┐рдд / рдХреЙрд▓ рдмрдЯрди



  <Button waves></Button> <Button waves icon="cloud" iconAlign="left"></Button> <Button floating waves size="large" color="red" icon="add"></Button> 



рдпрд╛ рд▓рд┐рдВрдХ:

  <Button href="#foo" waves> Link_0 </Button> <Button href="#bar" waves icon="cloud"> Link_1 </Button> <Button href="#qux" waves flat> Link_2 </Button> <Button href="#baz" waves icon="cloud" iconAlign="right"> Link_3 </Button> <Button href="#foo" waves floating size="large" color="red" icon="add" /> 



рдЗрд╡реЗрдВрдЯ: рдПрдХ рдХреНрд▓рд┐рдХ рдкрд░ рдкрдХрдбрд╝


рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛: рдХреНрд▓рд┐рдХ рдХрд░рдирд╛ рдЖрдк рдПрдХ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдкрдХрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣:

 <Button on:click="set({ count: count + 1 })" waves>Button++</Button> <Button on:click="set({ count: count - 1 })" waves icon="cloud" iconAlign="left">Button--</Button> 

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдирд┐рд░реНрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ:

 data() { return { count: 3 }; }, 

рдФрд░ рдХрд╣реАрдВ рдпрд╣ рдХрд╛рдЙрдВрдЯрд░ рдкреНрд░рд┐рдВрдЯ:

 <p>Count: {count}</p> 

GitHub рдХреЛрдб рдФрд░ рдбреЗрдореЛ ред

рд╡рд┐рдзрд┐ рджреЛ: REPL - рд╕рд░рд▓ рдФрд░ рддреЗрдЬ


рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреА рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдПрдХ рд╢рд╛рдВрдд рд╕реИрдВрдбрдмреЙрдХреНрд╕ рд╣реИ - рдЖрд░рдИрдкреАрдПрд▓, рдЬрд┐рд╕рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рджрд░реНрдЬрдиреЛрдВ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВред рдФрд░ рд╡рд╣рд╛рдБ рдЖрдк рддреИрдпрд╛рд░ рдХреЛрдб рдХреЛ рдХрд╛рдВрдЯрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрдкрдиреЗ рдЦреБрдж рдХреЗ рдФрд░ рд╢реЗрдпрд░ рдХреЗ рдХреБрдЫ рдЬреЛрдбрд╝ / рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд╣рд╛рдБ рдЙрдкрд░реЛрдХреНрдд рдШрдЯрдХ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ ред

Source: https://habr.com/ru/post/hi418679/


All Articles