今回は、Vue がローカル スコープとモジュール化を実装する方法と、Vue がローカル スコープとモジュール化を実装する際の注意点について説明します。実際のケースを見てみましょう。
CSS モジュールは、コンポーネントのスタイルが相互に影響を与えないように、各ローカル クラスにグローバルに一意のクラス名を与えます。例:
/* button.css */ .button { font-size: 16px; } .mini { font-size: 12px; }
これは次のように変換されます:
/* button.css */ .button__button--d8fj3 { font-size: 16px; } .button__mini--f90jc { font-size: 12px; }
CSS モジュール ファイルをインポートすると、ローカル クラス名からグローバル クラス名へのマッピング オブジェクトが提供されます。次のように:
import styles from './button.css' // styles = { // button: 'button__button--d8fj3', // mini: 'button__mini--f90jc' // } element.innerHTML = '<button class="' + styles.button + ' ' + styles.mini + '" />'
vue-css-modules: 簡略化されたクラス名のマッピング
ここに CSS モジュールを使用したボタン コンポーネントがあります:
<template> <button :class="{ 'global-button-class-name': true, [styles.button]: true, [styles.mini]: mini }">点我</button> </template> <script> import styles from './button.css' export default { props: { mini: Boolean }, data: () => ({ styles }) } </script>
確かに、CSS モジュールは Vue コンポーネントに適しています。ただし、次の欠点もあります:
データでスタイルを渡す必要があります
グローバル クラス名をインポートするには、styles.localClassName を使用する必要があります
他のグローバル クラス名がある場合は、それらを入力する必要があります一緒に
ローカルクラス名と属性名が同じでもコンポーネントの属性値にバインドしたい場合は明示的に指定する必要があります
上記のボタンコンポーネントの場合、 vue-css-modules を使用する 変更後:
<template> <button class="global-button-class-name" styleName="button :mini"> 点我 </button> </template> <script> import CSSModules from 'vue-css-modules' import styles from './button.css' export default { mixins: [CSSModules(styles)], props: { mini: Boolean } } </script>
現在:
データでスタイルを渡す必要はありませんが、mixins:full_moon_with_face:
スタイルに別れを告げることができます。 localClassName
Change local クラス名は styleName 属性に配置され、グローバル クラス名は class 属性に配置されます。これにより、ローカル クラス名がコンポーネントのプロパティとバインドされます。同じ名前です: modifier
<button styleName="@button">按钮</button>
<button styleName="button" data-component-button="true">按钮</button>
.form [data-component-button] { font-size: 20px; }
<button styleName="$type">按钮</button>
<button :styleName="type">按钮</button>
<button styleName=":mini">按钮</button>
<button :styleName="mini ? 'mini' : ''">按钮</button> disabled=isDisabled <button styleName="disabled=isDisabled">按钮</button>
<button :styleName="isDisabled ? 'disabled' : ''">按钮</button>
<template> <button class="global-button-class-name" styleName="button :mini"> 点我 </button> </template> <script> import CSSModules from 'vue-css-modules' import styles from './button.css' export default { mixins: [CSSModules(styles)], props: { mini: Boolean } } </script>
<template> <button class="global-button-class-name" styleName="button :mini"> 点我 </button> </template> <script> import CSSModules from 'vue-css-modules' export default { mixins: [CSSModules()], props: { mini: Boolean } } </script> <style module> .button { font-size: 16px; } .mini { font-size: 12px; } </style>
import CSSModules from 'vue-css-modules' import styles from './button.css' export default { mixins: [CSSModules(styles)], props: { mini: Boolean }, render() { return ( <button styleName="@button :mini">点我</button> ) } }
白黒だけ残してJSを使用して画像を操作する
Vue2のルーティングナビゲーションフックをカプセル化して実戦で使用する以上がVue がローカル スコープとモジュール化を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。