Vue で構築されたプロジェクトがあり、Vue アプリケーションのコンポーネントを Angular アプリケーションで再利用して、すべてのコンポーネントを最初から再構築する必要がないようにしたいと考えています。
Mediumでこのチュートリアルを見ました:Angular アプリケーションで Vue 2.0 コンポーネントを使用する方法ただし、このチュートリアルは AngularJS 向けです。
これまでにこれをやったことがある人はいるか、やる価値はあるか、チュートリアルや参考資料を知っている人はいるか、気になっています。
ベストアンサー1
Vueコンポーネントを次のようにラップしますネイティブWebコンポーネント。
Angular はカスタム Web コンポーネントの使用をサポートしているため、Vue コンポーネント (Web コンポーネントとしてラップ) を使用できるようになります。
Angular にとって、カスタム Web コンポーネントが Vue によって生成されたかどうかは関係ありません (Angular にとっては、それらはネイティブ HTML 要素である可能性があります)。
デモ
デモはAngular 5アプリです。Vueカスタムコンポーネントは次のように定義されています。index.html
. どのようにapp/app.component.html
ネイティブ要素であるかのように、テンプレート内で直接使用されます。
以下に手順を順を追って説明します。
Vueで
使用vue-custom-element
Vue コンポーネントを Web コンポーネントとしてラップするには:
<script src="https://unpkg.com/vue"></script>
<script src="https://unpkg.com/[email protected]/dist/vue-custom-element.js"></script>
<script>
const MyVueWebComp = {
props: ['msg'],
template:`
<div style="border: 3px dashed green; padding: 5px">
I am my-vue-web-comp.<br>
Value of "msg" prop: {{ msg }}<br>
<input v-model="text"><button @click="addText">Click me</button>
<div v-for="t in texts">
Text: {{ t }}
</div>
</div>
`,
data() {
return {
text: '',
texts: []
};
},
methods: {
addText() {
this.texts.push(this.text);
this.text = '';
}
}
};
Vue.customElement('my-vue-web-comp', MyVueWebComp);
</script>
<my-vue-web-comp>
これにより、DOMで直接使用できるWebコンポーネントが作成されます。それなし動作する Vue インスタンスが必要です。
上記はブラウザで直接実行できるデモです。.vuenpm install vue-custom-element --save
ファイルと vue-cli アプリを使用する場合は、次のようなファイルを作成する必要があります.js
。
import Vue from 'vue';
import vueCustomElement from 'vue-custom-element';
import MyElement from './MyElement.vue';
Vue.use(vueCustomElement);
Vue.customElement('my-element', MyElement);
これをバンドルすると、.js
単一のタグとして直接インポートできるファイルが生成されます<script>
。上記のコードとスクリプトタグ全体の代わりに。
詳細については、vue-custom-element
のドキュメント。
Angularの場合
さて、AngularアプリでWebコンポーネント(Vueで生成されたものかどうかに関係なく)をインポートした後、Angularで使用できるように設定するschemas: [CUSTOM_ELEMENTS_SCHEMA]
次を追加してください@NgModule
:
import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
//...
@NgModule({
// ...
schemas: [
CUSTOM_ELEMENTS_SCHEMA // added this
]
})
export class AppModule {
これで、Web コンポーネント (Vue から生成されたものもそうでないものも) を Angular テンプレートで直接使用できるようになりました。たとえば、上記のコードで定義されたコンポーネントは次のように使用できます。
<my-vue-web-comp [msg]="name"></my-vue-web-comp>
実際、実行可能なデモその使用方法の例を示します。
制限事項
古いブラウザのサポートにはポリフィルが必要な場合があります。ご確認くださいvue-custom-element
のドキュメント詳細については。