質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

Q&A

解決済

1回答

2367閲覧

vue-cli3.0 typescript モジュールの使い方

退会済みユーザー

退会済みユーザー

総合スコア0

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

0グッド

0クリップ

投稿2018/06/14 03:31

編集2018/06/15 07:34

https://alligator.io/vuejs/using-new-vue-cli-3/

↑vue-cli3.0 で環境を構築しました

https://www.npmjs.com/package/vue-mce

↑こちらのモジュールを使ってみたいです

typescript

1//main.ts 2 3import Vue from 'vue'; 4import App from './App.vue'; 5import router from './router'; 6import store from './store'; 7 8import VueMce from 'vue-mce'; //←ここと 9 10Vue.use(VueMce) //←ここ 11 12Vue.config.productionTip = false; 13 14new Vue({ 15 router, 16 store, 17 render: (h) => h(App), 18}).$mount('#app');

このように宣言すれば

<vue-mce/>

タグが使えるのかなと思ったのですが

vue-mce.common.js?9a3b:1 Error: TinyMce was not found

と言われ使えませんでした

ここで必要とされているtinymce

https://github.com/tinymce/tinymce-vue

を入れてみたのですが、同じエラーが出てしまいます

そもそもモジュールの使い方が間違っているのでしょうか

typescript

1//router.ts 2 3import Vue from 'vue'; 4import Router from 'vue-router'; 5 6import Top from './views/Top.vue' 7import openNewFiles from './views/openNewFiles.vue' 8import createNew from './views/createNew.vue' 9 10Vue.use(Router); 11 12export default new Router({ 13 routes: [ 14 { 15 path: '/', 16 name: 'top', 17 component: Top, 18 }, 19 { 20 path: '/openNewFiles', 21 name: 'openNewFiles', 22 component: openNewFiles, 23 }, 24 { 25 path: '/createNew', 26 name: 'createNew', 27 component: createNew, 28 } 29 ], 30});

これはrouter.tsなのですが
ルーターインスタンスをexportするという宣言でしょうか

そして、vueを初期化する際の引数に入れることで、routerモジュールを適用しているのでしょうか

new Vue({
router,
store,
render: (h) => h(App),
}).$mount('#app');

では逆に、router.tsの

Vue.use(Router);

という宣言はどのような役割を担うのでしょうか

typescript

1 2//vueMce.ts 3 4import Vue from 'vue'; 5import VueMce from 'vue-mce'; 6 7Vue.use(VueMce); 8 9//export default new VueMce(){} 10 11export default VueMce

router.tsを真似して作ってみました
vueMceは定数みたいで、newできないと言われてしまったので

export default VueMce

としてみました

main.tsの方でimportして、引数に加えてみたのですが、

'vueMce' does not exist in type 'ComponentOption

と言われてしまい、できませんでした

どなたか教えてくださいませんでしょうか...

--------------------追記--------------------

yhg様、毎回本当にありがとうございます

回答を参考に今朝から色々試していたのですが、うまくできませんでした...

まず

npm install --save tinymce

でtinymceをnode_modulesに加えました

次に

import 'tinymce';
import Vue from 'vue';
import VueMce from 'vue-mce';

Vue.use(VueMce);

こちらを main.tsに書き足しました
これでできるのかなと思ったのですが、

theme.js:1 Uncaught SyntaxError: Unexpected token <

というエラーが出てしまいました

elementを見ると
vue-mceコンポーネントのところは

html

1<div class="tinymce"> 2 <div class="tinymce__init-area" id="mce_0" style="visibility: hidden;"> 3 </div> 4 <input name="" hidden="hidden"> 5</div>

このようになってました

typescript

1 2//main.ts 3 4import tinymce from 'tinymce' 5 6import paste from 'tinymce/plugins/paste'; 7import link from 'tinymce/plugins/link'; 8 9tinymce.init({ 10 plugins: [paste, link] 11})

このような書き方も試してみたのですが、動かなかったです...

最終的には

import 'tinymce';
import Vue from 'vue';
import VueMce from 'vue-mce';

Vue.use(VueMce);

<script src="https://cloud.tinymce.com/stable/tinymce.min.js"></script>

こちらをindex.htmlのヘッダーに書くというので正しく動くのですが、

なるべくimportで解決したいです...(T_T)
あまり、scriptタグではやりたくないです
どのようにすればいいでしょうか...

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

tinymce-vue は tinymce 公式の Vue コンポーネントです。tinymce 本体ではありません。
vue-mcetinymce-vue の非公式版みたいなものです。

vue-mce/src/component/index.js

javascript

1 mounted() { 2 if (!window.tinymce) { 3 return this.handleError(new Error('TinyMce was not found')) 4 }

を見ると分かるように、window.tinymce がないとダメっぽいので、

javascript

1import 'tinymce'; 2import Vue from 'vue'; 3import VueMce from 'vue-mce'; 4 5Vue.use(VueMce);

を適当なところに記載し、テーマCSSとかもimportしてテンプレートにタグを書くだけです。


router.ts の解釈は合ってます。
Vue.use(...) はプラグインをインストールする際に使います。

vue-router の場合は <router-view><router-link>コンポーネントのインストールに加えて、全てのコンポーネントにミックスインを適用してbeforeCreateにフックし、this.$routerのように簡単にルーターインスタンスにアクセスできるようにしたりということを中でやってます。this.$router にルーターインスタンスを入れるために Vue インスタンス作成時のオプションで router を設定してる感じですね。

今回の場合はコンポーネントのインストールだけなので、

typescript

1new Vue({ 2 . 3 . 4 . 5 vueMce 6})

などとする必要はありません。

ちなみに VueMce の中身は vue-mce/vue-mce.d.ts に書いてあるとおり、

typescript

1export interface VueMce { 2 install: PluginFunction<never> 3 4 component: VueMceComponent 5}

のようになっています。

投稿2018/06/14 16:02

yhg

総合スコア2161

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/06/15 09:20 編集

丁寧な回答ありがとうござます 「全てのコンポーネントにミックスインを適用してbeforeCreateにフックし、this.$routerのように簡単にルーターインスタンスにアクセスできるようにしたりということを中でやってます。this.$router にルーターインスタンスを入れるために Vue インスタンス作成時のオプションで router を設定してる」 ということに関して、 https://jp.vuejs.org/v2/guide/mixins.html ミックスイン (mixin) は、Vue コンポーネントに再利用可能で柔軟性のある機能を持たせるための方法です。ミックスインオブジェクトは任意のコンポーネントオプションを含むことができます。コンポーネントがミックスインを使用するとき、ミックスインの全てのオプションはコンポーネント自身のオプションに”混ぜられ”ます。 例えば、あるコンポーネントにmixinを適用し、そのコンポーネントで元々created関数が定義されてた場合、mixinで定義したcreated関数の中の処理が、そのコンポーネントのcreated関数の中に加えられるといった感じでしょうか つまりこの場合だと、ルーターインスタンスにアクセスできる処理を全てのコンポーネントに加えるようなイメージでしょうか そのような処理や、this.$router にルーターインスタンスを入れる処理などは beforeCreateのタイミングでしかできないのでしょうか
yhg

2018/06/15 13:45

> 同じ名前のフック関数はそれら全てが呼び出されるよう配列にマージされます。ミックスインのフックはコンポーネント自身のフック前に呼ばれます。 と公式ドキュメントに書かれてます。 ミックスインで beforeCreate にフックした場合は、各コンポーネントの beforeCreate メソッドが呼び出される前にミックスインの beforeCreate メソッドが呼び出されるような形ですね。 this.$router などに値を入れるだけなら他のタイミングでも出来ますが、created や computed 内で呼び出されることが想定されるなら beforeCreate にフックする必要があります。特別な意図がない場合は beforeCreate にフックすれば良いと思います。 ただし、これはプラグインなどを制作する場合の話で、アプリ制作などで Vue.prototype を変更しても大丈夫な場合は↓のような感じでプロパティを定義してしまえばOKです。 Vue.prototype.$appName = 'My App' 詳しくはこちら https://jp.vuejs.org/v2/cookbook/adding-instance-properties.html また TypeScript の場合は宣言ファイルを書く必要が出てきます。 ↓例 import Vue from 'vue'; declare module 'vue/types/vue' { interface Vue { $appName: string; } }
退会済みユーザー

退会済みユーザー

2018/06/18 06:28

いつも本当にありがとうございます ドキュメントをもう一度、読み直してみます(T_T) なるほどです、フック関数と言うのはvueで言うcreatedとかbeforeCreateとかが当たるのでしょうか ただ、フックと言う言葉を調べていると 「フック (プログラミング) フック(Hook)は、プログラム中の特定の箇所に、利用者が独自の処理を追加できるようにする仕組みである。」 とあるので、普通にmethodsに追加する関数の方がフック関数っぽいなとか思いました、って解釈変ですかね(>_<) そして例えばcreatedだと、mixinの処理もvueインスタンスの処理も両方実行されるのですね(mixinのcreatedの処理→vueインスタンスのcreatedの処理の順で) methodsだと同じ名前の関数は、vueインスタンスの方の処理だけが実行されるのですね なるほどです Vue.prototype.$appName = 'My App' 今 $appName は、作成前でも全ての Vue インスタンスで使用可能です。 実行した場合: new Vue({ beforeCreate: function() { console.log(this.$appName) } }) "My App" はコンソールに記録されます。 これはインスタンスが作られる前にVueクラスに直接プロパティを追加しているイメージでしょうか そしてtypescriptからコンパイルするためには型定義が必要だと export interface Vue { readonly $el: HTMLElement; readonly $options: ComponentOptions<Vue>; readonly $parent: Vue; readonly $root: Vue; readonly $children: Vue[]; readonly $refs: { [key: string]: Vue | Element | Vue[] | Element[] }; readonly $slots: { [key: string]: VNode[] }; 'vue/types/vue' (vue.d.ts)に上記インターフェースが定義されていました ここに追加するイメージでしょうか --------------------------------------------------------------------------------------------------------------------------------------- vue-mceに関する質問を質問本文に追記したので良かったらみて見てください(T_T)
退会済みユーザー

退会済みユーザー

2018/06/19 02:39

Vue.prototype.$userName = "nichika"; declare module "vue/types/vue" { interface Vue{ $userName : string } } プロパティの追加、これでできて感動してます declareについて https://docs.solab.jp/typescript/ambient/declaration/ "vue/types/vue"と言う外部モジュールが使われることを宣言しているのでしょうか
yhg

2018/06/20 05:37

うーん。CodeSandbox で色々試してみましたがイマイチ原因分かりません。 TinyMCE の公式ドキュメントにモジュールの読み込みについて書かれてましたが書き換えても同じエラーが出てしまいますね。 https://www.tinymce.com/docs/advanced/usage-with-module-loaders/ vue-mce はそれほど難しいことしてる訳でなくコードも短いので、vue-mce を参考にご自分で TinyMCE のラッパーコンポーネント書いてしまったほうが早いかもしれませんね。
退会済みユーザー

退会済みユーザー

2018/06/21 02:34

ありがとうございます わかりました、ちょっとやってみます... 本当にありがとうございました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問