5
5
6
6
# グローバル API <MigrationBadges :badges =" $frontmatter.badges " />
7
7
8
- Vue 2.x では、グローバルに Vue の振る舞いを変更するグローバル API や設定が多数ありました。例えば、グローバルコンポーネントを作る際には 、 以下のような ` Vue.component ` API を使用していました :
8
+ Vue 2.x では、グローバルに Vue の振る舞いを変更するグローバル API や設定が多数ありました。例えば、グローバルコンポーネントを登録するには 、 以下のような ` Vue.component ` API を使用します :
9
9
10
10
``` js
11
11
Vue .component (' button-counter' , {
@@ -28,18 +28,18 @@ Vue.directive('focus', {
28
28
29
29
- グローバル設定を使用することで、テスト中に他のテストケースを誤って汚染しやすくなってしまいました。ユーザーは元のグローバル設定を保存し、各テスト後に元に戻すことを注意深くやる必要がありました (例 ` Vue.config.errorHandler ` のリセット)。` Vue.use ` や、` Vue.mixin ` のような API は、影響を元に戻す方法もありません。このため、プラグインを含むテストは特に厄介でした。実際、vue-test-utils はそれらに対応するために ` createLocalVue ` という特別な API を作らなければなりませんでした:
30
30
31
- ``` js
32
- import { createLocalVue , mount } from ' @vue/test-utils'
31
+ ``` js
32
+ import { createLocalVue , mount } from ' @vue/test-utils'
33
33
34
- // 拡張した `Vue` コンストラクタを作成
35
- const localVue = createLocalVue ()
34
+ // 拡張した `Vue` コンストラクタを作成
35
+ const localVue = createLocalVue ()
36
36
37
- // "ローカル" Vue コンストラクタに、"グローバル" にプラグインをインストール
38
- localVue .use (MyPlugin)
37
+ // "ローカル" Vue コンストラクタに、"グローバル" にプラグインをインストール
38
+ localVue .use (MyPlugin)
39
39
40
- // `localVue` をマウントオプションに渡す
41
- mount (Component, { localVue })
42
- ```
40
+ // `localVue` をマウントオプションに渡す
41
+ mount (Component, { localVue })
42
+ ```
43
43
44
44
- また、グローバル設定では、同じページ上の複数のアプリケーション間でグローバル設定が異なる Vue のコピーを共有することが困難でした。
45
45
@@ -65,7 +65,15 @@ import { createApp } from 'vue'
65
65
const app = createApp ({})
66
66
```
67
67
68
- アプリケーションインスタンスは、現在のグローバル API のサブセットを公開します。おおまかには、_ Vue の振る舞いをグローバルに変更する全ての API は、アプリケーションインスタンスに移されます_ 。こちらは、現在のグローバル API とインスタンス API との対応表です:
68
+ Vue の [ CDN] ( /guide/installation.html#cdn ) ビルドを使っている場合、 ` createApp ` はグローバルな ` Vue ` オブジェクトを介して公開されます:
69
+
70
+ ``` js
71
+ const { createApp } = Vue
72
+
73
+ const app = createApp ({})
74
+ ```
75
+
76
+ アプリケーションインスタンスは、 Vue 2 のグローバル API のサブセットを公開します。おおまかには、_ Vue の振る舞いをグローバルに変更する全ての API は、アプリケーションインスタンスに移されます_ 。こちらは、 Vue 2 のグローバル API とインスタンス API との対応表です:
69
77
70
78
| 2.x グローバル API | 3.x インスタンス API (` app ` ) |
71
79
| -------------------------- | ------------------------------------------------------------------------------------------------ |
@@ -76,6 +84,7 @@ const app = createApp({})
76
84
| Vue.directive | app.directive |
77
85
| Vue.mixin | app.mixin |
78
86
| Vue.use | app.use ([ 以下を参照] ( #a-note-for-plugin-authors ) ) |
87
+ | Vue.prototype | app.config.globalProperties ([ 以下を参照] ( #vue-prototype-replaced-by-config-globalproperties ) ) | |
79
88
80
89
グローバルに振る舞いを変更しないその他のグローバル API は [ グローバル API の Treeshaking] ( ./global-api-treeshaking.html ) にあるように、名前付きエクスポートになりました。
81
90
@@ -94,17 +103,36 @@ ES Modules ビルドでは、モジュールバンドラーと一緒に使用さ
94
103
Vue .config .ignoredElements = [' my-el' , / ^ ion-/ ]
95
104
96
105
// after
97
- const app = Vue . createApp ({})
106
+ const app = createApp ({})
98
107
app .config .isCustomElement = tag => tag .startsWith (' ion-' )
99
108
```
100
109
101
110
::: tip 重要
102
111
103
- Vue 3.0 では、要素がコンポーネントであるかどうかのチェックはコンパイルフェーズに移されたため、この設定はランタイムコンパイラを使用しているときにのみ尊重されます。ランタイム限定のビルドを使用している場合は、代わりにビルド設定で ` isCustomElement ` を ` @vue/compiler-dom ` に渡す必要があります - 例えば [ ` compilerOptions ` option in vue-loader] ( https://vue-loader.vuejs.org/options.html#compileroptions ) で。
112
+ Vue 3 では、要素がコンポーネントであるかどうかのチェックはコンパイルフェーズに移されたため、この設定はランタイムコンパイラを使用しているときにのみ尊重されます。ランタイム限定のビルドを使用している場合は、代わりにビルド設定で ` isCustomElement ` を ` @vue/compiler-dom ` に渡す必要があります - 例えば [ ` compilerOptions ` option in vue-loader] ( https://vue-loader.vuejs.org/options.html#compileroptions ) で。
104
113
105
114
- ランタイム限定ビルド使用時に、` config.isCustomElement ` が代入された場合、ビルドの設定でこのオプションを設定するように警告が表示されます。
106
115
- これは、Vue CLI 設定の新しいトップレベルのオプションになります。
107
- :::
116
+ :::
117
+
118
+ ### ` Vue.prototype ` は ` config.globalProperties ` と置換
119
+
120
+ Vue 2 では、すべてのコンポーネントでアクセス可能なプロパティを追加するために、 ` Vue.prototype ` がよく使われていました。
121
+
122
+ Vue 3 では、 [ ` config.globalProperties ` ] ( /api/application-config.html#globalproperties ) が同様のものです。これらのプロパティは、アプリケーション内でコンポーネントをインスタンス化する際にコピーされます:
123
+
124
+ ``` js
125
+ // before - Vue 2
126
+ Vue .prototype .$http = () => {}
127
+ ```
128
+
129
+ ``` js
130
+ // after - Vue 3
131
+ const app = createApp ({})
132
+ app .config .globalProperties .$http = () => {}
133
+ ```
134
+
135
+ また ` globalProperties ` の代わりに ` provide ` ([ 後述] ( #provide-inject ) ) を使うことも考えられます。
108
136
109
137
### プラグイン作者へのノート
110
138
@@ -127,7 +155,7 @@ app.use(VueRouter)
127
155
128
156
## アプリケーションインスタンスのマウント
129
157
130
- ` createApp(/* オプション */) ` で初期化した後、アプリケーションインスタンス ` app ` は、` app.mount(domTarget) ` を使って Vue ルートインスタンスをマウントできます 。
158
+ ` createApp(/* オプション */) ` で初期化した後、アプリケーションインスタンス ` app ` は、` app.mount(domTarget) ` を使ってルートコンポーネントインスタンスをマウントできます 。
131
159
132
160
``` js
133
161
import { createApp } from ' vue'
@@ -178,6 +206,8 @@ export default {
178
206
}
179
207
```
180
208
209
+ ` provide ` を使うことは、特にプラグインを書くときに、 ` globalProperties ` の代わりになります。
210
+
181
211
## アプリケーション間での設定の共有
182
212
183
213
コンポーネントや、ディレクティブの設定をアプリケーション間で共有する方法の一つとして、以下のようなファクトリ関数があります:
@@ -189,7 +219,7 @@ import Bar from './Bar.vue'
189
219
190
220
const createMyApp = options => {
191
221
const app = createApp (options)
192
- app .directive (' focus' /* ... */ )
222
+ app .directive (' focus' , /* ... */ )
193
223
194
224
return app
195
225
}
@@ -198,4 +228,4 @@ createMyApp(Foo).mount('#foo')
198
228
createMyApp (Bar).mount (' #bar' )
199
229
```
200
230
201
- このようにして、 ` fucus ` ディレクティブは Foo と Bar 両方のインスタンスとその子で有効になります。
231
+ このようにして、 ` fucus ` ディレクティブは ` Foo ` と ` Bar ` 両方のインスタンスとその子で有効になります。
0 commit comments