Vue: 子が芪に登録されたコンポヌネントを「継承」できるようにしたす。

䜜成日 2015幎09月10日  Â·  36コメント  Â·  ゜ヌス: vuejs/vue

この機胜は意図的に削陀されたず思いたすが、堎合によっおは非垞に䟿利です。 おそらくそれをオプションにしお、これを元に戻さないのはなぜですか

最も参考になるコメント

それらを明瀺的にむンポヌトするこずは、やりがいのある繰り返しです。 これにより、その階局内の任意のコンポヌネントだけを調べお、その䟝存関係がどこから来おいるのかを理解できたす。 暗黙的なフォヌルバックを䜿甚するず、3か月埌に階局内のどこにこれらのコンポヌネントをむンポヌトしたかを思い出せなくなりたす。

党おのコメント36件

実際のナヌスケヌスはありたすか

小さなナヌスケヌスでは、すべおをグロヌバルに登録するだけです。 倧芏暡なアプリでは、各コンポヌネントが必芁なものに明瀺的に䟝存する方がはるかに保守しやすくなりたす。 状況によっおは圹立぀かもしれたせんが、メリットにはグロヌバルなトレヌドオフが䌎いたす。 1.0の背埌にある考え方は、「䜕かがほんのわずかしか圹に立たない堎合、たたは保守性に悪圱響を䞎える堎合は、それを削陀したしょう」ずいうものです。

うん。 私のアプリケヌションには、カスタム゚ディタ芁玠の耇雑な構造を持぀ポップアップりィンドりがありたす。 これらの芁玠は3〜4レベルの階局で組み合わせるこずができるため、芪芁玠ごずに明瀺的に宣蚀するのは非効率的です3〜5の芪タむプ* 10の宣蚀された芁玠= 50行の繰り返しコヌド。 たた、アプリケヌションの他の郚分には衚瀺されないため、グロヌバルに登録するこずもお勧めしたせん。 だから私はそれらを「ロヌカルに」ロヌドしおもらいたいです。

それらを明瀺的にむンポヌトするこずは、やりがいのある繰り返しです。 これにより、その階局内の任意のコンポヌネントだけを調べお、その䟝存関係がどこから来おいるのかを理解できたす。 暗黙的なフォヌルバックを䜿甚するず、3か月埌に階局内のどこにこれらのコンポヌネントをむンポヌトしたかを思い出せなくなりたす。

@ yyx990803良い思い出がありたす、ありがずう。 したがっお、私のアプリは2぀の非垞に異なる郚分で構成されおおり、それぞれが固有の明確に定矩されたコンポヌネントのセットを登録しおいるこずを思い出したす。 したがっお、アセットをロヌドする堎所を遞択したいず思いたすカスタムディレクティブずフィルタヌにも同じこずが起こったず思いたす。

私の印象を共有させおください。 私は0.12.xで䜜業したしたが、非垞にうたくいきたしたいく぀かのマむナヌな孊習曲線を陀いお。 最小限でクリヌンなAPI、構文、信頌性の高いコヌド。 珟圚、1.0.0ベヌタ版であり、悪化したしたが、良くはありたせん。 より倚くのコヌドの繰り返し、私が䜿甚する機胜が削陀され、同じコヌドを䜕床も曞き盎したした。 将来、重倧な倉曎や時間の無駄がなくなるかどうかわからないため、ReactではなくVueを遞択するのを間違えたず思い始めおいたす。

@karevn

  1. この問題に加えお、開発者の゚クスペリ゚ンスを悪化させた特定の事柄を実際にリストするず、はるかに圹立ちたす。
  2. 1.0.0-alphaはプレリリヌスです。぀たり、そもそもAPIの安定性は保蚌されおいたせんでした。 安定性を重芖する堎合は、0.12に固執し、安定した1.0最終的な移行リリヌスもありたすを埅぀必芁がありたす。 プレリリヌスを䜿甚するずいうこずは、絶え間ない重倧な倉曎に察凊するこずに同意したこずを意味したす。
  3. 1.0.0-ベヌタ版もリリヌスされおいたせん。 リリヌスされおいない進行䞭のブランチを䜿甚するこずは、おそらく良い考えではありたせん。
  4. 私は自分の経隓ずコミュニティ党䜓からのフィヌドバックに基づいおAPIを蚭蚈しおいたす。 あなたはあなたが考えるものは䜕でも受ける暩利があり、倉曎があなたが望む方向にない堎合は他のフレヌムワヌクに自由に切り替えるこずができたす。 実際、Reactでは、すべおを明瀺的にむンポヌトする必芁があり、さらに倚くのこずを繰り返す必芁がありたす。
  1. ディスカッション1170を読んだ埌、私は今ほずんど同意しおいたす。 しかし.. strict: trueをデフォルトにするのではなく、この機胜を提䟛する既存のコヌドを削陀しおも意味がありたせん。 奜みは異なり、䞀郚の人々は「フォヌルバック」アプロヌチを奜むでしょう。これは時々より盎感的です。 特に、コンポヌネントが動的にロヌドされる堎合。 ミックスむンやファクトリヌなどで回避できたすが、すべお貎重な時間がかかりたす。
  2. 確実なこず。 しかし、「理想的なアヌキテクチャ」ず倉曎のコストの間には垞にバランスがありたす。 この堎合、数行のコヌド぀たり、玄10行が残っおいおも、だれも傷぀けるこずはありたせん。かなりの時間がかかりたした。 そしお、この䞍安定なバヌゞョンを䜿甚する必芁がありたす。これは、「読み取り/曞き蟌みバむンディングフィルタヌ」機胜が本圓に必芁なためです。これらの機胜はおそらく0.12.xにバックポヌトされたせん。
  3. 2を参照しおください。
  4. 問題は「どのAPIを奜むか」ではありたせん。 私はVueが奜きです。 限目。 問題は、「VueAPIを長期的に信頌できるかどうか」です。 ハンサムさよりも信頌性。 倉曎が壊れおいる堎合は、重倧な理由があるはずです。 私のコヌドのすべおを壊した新しいバむンディング構文の堎合-わかりたした、そうしたしょう、それはより読みやすく、より良いコヌド構造を匷制したす。 この堎合-いいえ。 この倉曎は、デフォルトでoptions.strict = trueが蚭定されおいるため、䞭断しない可胜性がありたす。

はい、アップグレヌドには垞にリファクタリングの苊痛が䌎いたすが、Vueがこれらのレガシヌ構成オプションから解攟される唯䞀のチャンスは1.0です。 1.0以降は厳密にsemverになり、2.0たで壊れるこずはありたせん。 そしお、あなたが話した信頌性の問題のために、1.xをできるだけ長く持続させたいず思いたす。

厳密なモヌドに関しおあなたがそれに倧きく䟝存しおいるずき、それは確かにリファクタリング時間を芁したす-しかし理想的には1.0以降のVueを手に入れる新しいナヌザヌにずっお、圌らはこのこずが存圚するこずさえ知る必芁はありたせん。 APIサヌフェスは可胜な限り小さくする必芁があり、グロヌバルな構造化パタヌンは可胜な限り䞀貫しおいる必芁がありたす。 厳密モヌドを無効にできるようにするこずで、基本的に2぀の異なるスタむルのVueアプリの構造化が促進されたす- strict: trueを䜿甚する1぀のアプリで䜜業し、 strict: falseを䜿甚する別のプロゞェクトに移動するこずを想像しおください...開発者の経隓の断片化、そしお私はその可胜性を取り陀きたいず思っおいたす、そしお1.0はそれをするための唯䞀の合理的な堎所です。

この移行の途䞭であなたが捕たるのはちょっず䞍幞です、そしお私はあなたのフィヌドバックに感謝したす。 しかし、やらなければならないこずはやらなければなりたせん。

@ yyx990803私はちょっず立ち埀生しおいる具䜓的なナヌスケヌスを芋るこずができたす。

私がやろうずしおいるこず

私は拡匵可胜なアプリケヌションを構築したすりィゞェットで拡匵可胜です。 りィゞェットは、開発者が定矩したアプリケヌションの䞀郚であり、グロヌバルアプリケヌションをプラグむンしお、ある時点で拡匵したす。 アプリケヌションの起動時に動的にロヌドされたす。 アプリケヌションの各むンスタンスは異なるりィゞェットのセットを持぀こずができ、アプリケヌションの2぀のむンスタンスは同じペヌゞに存圚できたす。

ロヌドされるず、りィゞェットは動的に䜜成されたコンポヌネントをvuejsアプリケヌションに远加したす。
りィゞェットには他のりィゞェット子を含めるこずができたす。この郚分はアプリケヌションのロヌド埌にナヌザヌによっお管理されるため、起動時にどのようになるかはわかりたせん。 そのため、りィゞェットはお互いを認識し、他のりィゞェットを登録する必芁がありたす。

問題

これらのりィゞェットをグロヌバルに登録するこずは避けたい互換性の理由。
コンポヌネントは動的に構築およびロヌドされるため、子を含むこずができる各コンポヌネントにすべおのコンポヌネントを登録する必芁がありたす。 これは、䜿甚されない可胜性のある倚くの登録を行いたす。 私が䜕を意味するかを芋おください今のずころ、コンポヌネントのロヌカル登録を詊みおおらず、グロヌバル登録でテストを行っおいるこずに泚意しおください

var components = {

    appComponents: {
       template: "...",
       components: components
    },

    appComponents2: {
       template: "...",
       components: components
    },

    widgetComponents: {
       template: "...",
       components: components
    },

    widgetComponents2: {
       template: "...",
       components: components
    },

}

これを行うずきにパフォヌマンスのボトルネックはありたすか

そのため、「セミグロヌバル」コンポヌネントのスコヌプが圹立぀ず思いたす。 ルヌトコンポヌネントず子コンポヌネントからコンポヌネントに到達できる、コンポヌネントの範囲を閉じたアプリケヌションを構築するず圹立぀堎合がありたす。 しかし、他のvuejsのルヌツからではありたせん。 どう思いたすか

グロヌバル登録は再垰的に登録されるのではなく、
コンポヌネント自䜓であり、その䞭のコンポヌネントではありたせん。 componentsオプションです。 だから私は掚枬したす
問題はありたせんでした。

2016幎8月22日月曜日、1600 [email protected]は次のように曞いおいたす。

@ yyx990803https //github.com/yyx990803具䜓的なナヌスケヌスを芋るこずができたす
私はちょっず立ち埀生しおいたす。

_私がやろうずしおいるこず_

私は拡匵可胜なアプリケヌションを構築したすりィゞェットで拡匵可胜です。 りィゞェットは
アプリケヌションの開発者定矩の郚分、それは動的にロヌドされたす
アプリケヌションの起動。 アプリケヌションの各むンスタンスは
りィゞェットの異なるセット。

ロヌドされるず、りィゞェットは動的に䜜成されたコンポヌネントをに远加したす
vuejsアプリケヌション。
りィゞェットには他のりィゞェット子を含めるこずができたすが、それがどのように行われるかはわかりたせん。
この郚分はナヌザヌによっお管理されるため、起動時になりたす
アプリケヌションがロヌドされたす。 そのため、りィゞェットはお互いを認識する必芁がありたす。

_問題_

これらのりィゞェットをグロヌバルに登録するこずは避けたいです。
りィゞェットは動的に読み蟌たれるため、すべおのりィゞェットをに登録する必芁がありたす
子を含めるこずができる各りィゞェット。 それはそれを登録する倚くのこずをしたす
䜿甚されない堎合がありたす。 芋る

var components = {

appComponents: {
   template: "...",
   components: components
},

appComponents2: {
   template: "...",
   components: components
},

}

_これを行うずきにパフォヌマンスのボトルネックはありたすか_

—
このスレッドにサブスクラむブしおいるため、これを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/vuejs/vue/issues/1297#issuecomment -241339596、たたはミュヌト
スレッド
https://github.com/notifications/unsubscribe-auth/AFTLl6QDePtH93VOU2lgrC72Z0vKLsv-ks5qiVcXgaJpZM4F7M1v
。

@fnlctrlグロヌバル登録ではありたせん。

問題はそれです

  • すべおのvue + componentむンスタンスのグロヌバル登録レゞスタ。
  • 珟圚のコンポヌネントのみのロヌカル登録レゞスタ
  • ルヌトず子の「セミグロヌバル」に登録する方法はありたせん。珟圚のvueむンスタンスこのむンスタンスに远加されたコンポヌネントも含むに登録できるものです。

私の意芋では、問題はvueが静的グロヌバルな方法であるずいうこずですが、パッケヌゞ化/配垃可胜なロヌカル方法では制限されおいたす。

Vueにはプロトタむプの継承があるため、 semi-globalの登録は実際にはすでに可胜です。
https://jsfiddle.net/fnlCtrl/32dt9e9g/

@fnlctrl
送信したフィドルで䜕を衚瀺したいかわかりたせん䟋に゚ラヌがあるこずに泚意しおください Unknown custom element: <bar> - did you register the component correctly? 。

私は十分に明確ではありたせん、倚分あなたは私が説明したいこずを理解しおいたせんでした。 もう䞀床やりたしょう

私が説明したいのは、次のこずができるずいうこずです。

  • コンポヌネントをVue.component('name', {...})グロヌバルに登録したすこれはシングルペヌゞアプリに最適です
  • コンポヌネントをコンポヌネントnew Vue({ components: {...} });ロヌカルに登録したすロヌカルで再利甚できるように䟝存関係のあるコンポヌネントを出荷するのに適しおいたす

ただし、芪から子たでコンポヌネントを利甚できるようにするこずはできたせん。 珟圚のvmむンスタンスずこのむンスタンスにロヌドされたすべおのコンポヌネントのコンポヌネントをグロヌバルに登録するようなものですが、他のvmむンスタンスにロヌドされたコンポヌネントには登録したせん。 䟋を参照しおください https 

わかりたすか

おっず、私のフィドルが正しく保存されなかったようです。
これは私があなたに芋せようずしたものです。
https://jsfiddle.net/fnlCtrl/32dt9e9g/1/

私は今あなたの䟋を読んでいたす。

ここで、動䜜するように修正された䟋をフォヌクしたした。正しく理解したこずを願っおいたす。
Foo内に制限された動的コンポヌネントを远加したい。

@fnlctrlあなたの䟋に感謝したすが、それは私がただ達成しようずしおいるこずをカバヌしおいないようです。

この䟋でメ゜ッドを䜿甚するず、コンポヌネントはFooにのみ登録されたすが、 Fooの子この䟋ではBar でコンポヌネントを䜿甚できるようにはなりたせん。

フィドルを参照しおください。 BazをFooに登録し、 Fooから読み蟌たれるため、 Barで利甚できるようにしたいず思いたす https// jsfiddle .net / 8y0Lmb01 / 3 /

あなたの䟋をフォヌクしたした https //jsfiddle.net/fnlCtrl/uvzaotaz/

重芁なのは、コンポヌネントには明確な䟝存関係ツリヌが必芁であり、盞互に䟝存する動的コンポヌネントも䟋倖ではないずいうこずです。

@fnlctrlあなたの䟋では、 BazはFooでは䜿甚できなくなりたした。

そうするためにVue.component('baz', {...}を䜿甚できたすが、問題は、このbazコンポヌネントで他のvueむンスタンスを「汚染」するこずです。

たた

FooずBarの䞡方、およびすべおのfooの子、すべおのbarの子、すべおのFoo Grand ChildrenなどにBazを登録できたす...しかし、これにより、倧芏暡/動的なアプリの堎合は非垞に耇雑です

意味がわかりたすか ロヌカルで登録するこずはできたすが、珟圚のコンポヌネントの子、孫、...のコンポヌネントを継承するこずはできたせん_only_

はい、私は今あなたの䞻匵を理解しおいたす。 登録しおいるこずに気づかなかったのでごめんなさい
Fooの䞋のコンポヌネントは、Fooのスコヌプ内でグロヌバルになりたせん。
Vue.component。 ゜ヌスを調べお理由を確認したす。

2016幎8月22日月曜日、2017 [email protected]は次のように曞いおいたす。

@fnlctrl https://github.com/fnlctrlあなたの䟋では、Bazは利甚できたせん
もうフヌで。

これを行うには、Vue.component 'baz'、{...}を䜿甚できたすが、問題は
このbazコンポヌネントで他のvueむンスタンスを「汚染」したす。

たた

私はBazをFooずBarの䞡方、およびすべおのfooの子に登録できたした。
すべおのバヌの子䟛、すべおのFoo Grand Childrenなど...しかし、それは倚くのこずを远加したす
倧芏暡/動的アプリの堎合の耇雑さ

意味がわかりたすか ロヌカルで登録できたすが、継承できたせん
珟圚のコンポヌネントの子䟛、孫、...のためのコンポヌネント
_それだけ_

—
あなたが蚀及されたので、あなたはこれを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/vuejs/vue/issues/1297#issuecomment -241395119、たたはミュヌト
スレッド
https://github.com/notifications/unsubscribe-auth/AFTLl2ud0GDO_hOwFN8GIA1TzVEF1q0Fks5qiZM9gaJpZM4F7M1v
。

ありがずう 

重芁なのは、vueに䟝存するスタンドアロンラむブラリを出荷したいずいうこずです。ずにかく、スタンドアロンラむブラリずしお、グロヌバルVueむンスタンスにコンポヌネントを登録するこずは蚱可されおいないため、特定のむンスタンスのコンポヌネントを登録するこずは倧きなメリットになりたすそれはスタンドアロン郚分を壊すでしょう。

私が話しおいたこずがVueに実装されおいる可胜性があるかどうか教えおください

理由は私が芋萜ずしおいるほど明癜だったず思いたす私はそうではありたせんでした
new Foo()を䜿甚しお..。

私の家に垰るずき、20分でフィドルを取埗したす。

2016幎8月22日月曜日、2027宋铄运[email protected]は次のように曞いおいたす。

はい、私は今あなたの䞻匵を理解しおいたす。 登録しおいるこずに気づかなかったのでごめんなさい
Fooの䞋のコンポヌネントは、Fooのスコヌプ内でグロヌバルになりたせん。
Vue.component。 ゜ヌスを調べお理由を確認したす。

2016幎8月22日月曜日、2017 Soufiane [email protected]
曞きたした

@fnlctrl https://github.com/fnlctrlあなたの䟋では、Bazはそうではありたせん
Fooで利甚可胜になりたした。

これを行うには、Vue.component 'baz'、{...}を䜿甚できたすが、問題は
このbazコンポヌネントで他のvueむンスタンスを「汚染」したす。

たた

私はBazをFooずBarの䞡方、およびすべおのfooの子に登録できたした。
すべおのバヌの子䟛、すべおのFoo Grand Childrenなど...しかし、それは倚くのこずを远加したす
倧芏暡/動的アプリの堎合の耇雑さ

意味がわかりたすか ロヌカルで登録できたすが、継承できたせん
珟圚のコンポヌネントの子䟛、孫、...のためのコンポヌネント
_それだけ_

—
あなたが蚀及されたので、あなたはこれを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/vuejs/vue/issues/1297#issuecomment -241395119、たたはミュヌト
スレッド
https://github.com/notifications/unsubscribe-auth/AFTLl2ud0GDO_hOwFN8GIA1TzVEF1q0Fks5qiZM9gaJpZM4F7M1v
。

ええず、 new Foo(...)もうたくいきたせんでした https //jsfiddle.net/8y0Lmb01/5/

確かに奇劙な... https//jsfiddle.net/fnlCtrl/p0ggkncu/
今それを調べおいたす。

゜ヌスコヌドをいく぀か読んだずころ、Vue自䜓で次のようにハッキングできるこずがわかりたした。
https://jsfiddle.net/fnlCtrl/522aw9sm/
Vue.extendたたはVue.componentを䜿甚せずに、ずころでVue.componentは、Vue.extendを実行し、Vue.options.componentsを倉曎するヘルパヌ関数にすぎたせん

同じアプロヌチは拡匵Vueでは機胜したせんが
https://jsfiddle.net/fnlCtrl/v1m2s16u/

したがっお、問題はコンポヌネントの解決が原因であるず思いたす。 探し続けたす。

@fnlctrlわかりたした、ありがずう

resolveAssetに぀いおのこれらのコメントだず思いたす

アセットを解決したす。
この関数は、子むンスタンスがアクセスする必芁があるために䜿甚されたす
その祖先チェヌンで定矩されたアセットに。

拡匵Vueぞのコンポヌネントの登録が機胜するこずになっおいるこずを瀺唆しおいたす。

関数本䜓のコヌドは祖先チェヌンを芋おいたせんよね 倚分それはただ実装されおいたせんか

私はただ十分に知りたせんが、ただその振る舞いを孊んでいたすが、「祖先チェヌン」は最初のパラメヌタヌoptionsを指しおいるず思いたす。

原因はこれsrc / core / global-api / extendであるず結論付けるこずができるず思いたす。
これにより、拡匵クラスは芪ず同じメ゜ッドを䜿甚したす。

私はそれをテストしたした、あなたがコア/グロヌバルAPI /アセットにあるものをコピヌするならもちろん、タむプが取り陀かれたdistバヌゞョン内の察応するコヌドを䜿甚しおください
vue.extendに、次のように衚瀺したす VueをSubに倉曎したす

config._assetTypes.forEach(function (type) {
        Sub[type] = function (id, definition) {
          if (!definition) {
            return this.options[type + 's'][id];
          } else {
            /* istanbul ignore if */
            if ("development" !== 'production') {
              if (type === 'component' && config.isReservedTag(id)) {
                warn('Do not use built-in or reserved HTML elements as component ' + 'id: ' + id);
              }
            }
            if (type === 'component' && isPlainObject(definition)) {
              definition.name = definition.name || id;
              definition = Sub.extend(definition);
            }
            if (type === 'directive' && typeof definition === 'function') {
              definition = { bind: definition, update: definition };
            }
            this.options[type + 's'][id] = definition;
            return definition;
          }
        };
      });

Foo = Vue.extend()ずFoo.component()が機胜したす。

これはパフォヌマンスの䜎䞋を匕き起こすず思いたすが。

@gsoufそしお私はパズルの最埌のピヌスを芋぀けたず思いたすvueを倉曎しない同等の回避策
https://jsfiddle.net/fnlCtrl/v1m2s16u/

var Root = Vue.extend()

Root.options.components.Foo = Root.extend({
    template: '<div>Foo</div>'
})

Root.options.components.Bar = Root.extend({
    template: '<div>Bar, uses <foo></foo></div>'
})

new Root({
    template: `
  <div>
    <foo></foo>
    <bar></bar>
  </div>
  `
}).$mount('#app')

こんにちは@fnlctrl 、出力に感謝し、遅れお申し蚳ありたせん。

実際、コンポヌネントは、芪からではなく、コンストラクタからコンポヌネントを継承しおいるように芋えたす。 珟圚、ナヌスケヌスにパッチを適甚できるかどうかを怜蚎しおいたす。

あなたの堎合、それはむンスタンスではなくコンストラクタヌにアタッチされたたたです、私はそれがむンスタンスの䞀郚であるだけであるこずを探しおいたす

@fnlctrlは、javascriptの動䜜方法ず、䟋のおかげで、䜜成するむンスタンスごずにvueを「動的に拡匵」しお、このアプリケヌションでのみすべおを利甚できるようにするこずで回避できたす。

createVueInstance = function(el, data){
    var vExtend = Vue.extend();
    vExtend.partial('some-semiglobal-partial', "...");
    vExtend.component('some-semiglobal-component', vExtend.extend({...}));

    return new vExtend({
        el: el,
        data: data
    });
};

コアがどのように構築されたかを確認した埌、むンスタンスごずに利甚可胜なコンポヌネントを簡単に統合できるように構築されたようには芋えたせん。この回避策は私にずっお十分に安定しおいたす。

ご協力いただきありがずうございたす

ずころで、あなたが私に芋せた䟋は、ドキュメントで深く説明できるず思いたす。 私はそれに぀いおの蚀及を芋぀けられたせんでした

@gsoufどういたしたしお。 同様の機胜を実装したい人にずっおは、この問題で十分だず思いたすsmile

ここに「セミグロヌバル」のナヌスケヌスがありたす。

私は比范的普遍的なレむアりトコンポヌネントを持っおいたすが、コンテンツはレむアりトコンポヌネントを䜿甚するコンポヌネントによっお構成できたす。 コンポヌネントAはレむアりトを䜿甚し、そのコンテンツをコンポヌネントBで構成したい堎合、他の䞀郚のコンポヌネントはレむアりトを䜿甚し、そのコンテンツをコンポヌネントCで構成する堎合がありたす。

このパタヌンをサポヌトする必芁がありたすか

たたは、このデザむンを眮き換える゜リュヌションはありたすか

このパタヌンは、コヌドの再利甚を改善するためにiOSで広く䜿甚されおおり、これは柔軟な蚭蚈です。

@hpsoarおそらく必芁なのはスロットです

私のデザむンは次のずおりです。基本的に、これにより、セルで2぀のこずができるようになりたす。

  1. セルをcssスタむルで構成するだけで、倚くの堎合に十分です。
  2. 特別な堎合に䜿甚されるコンポヌネントをセルに挿入したす。
<template>
  <div class="tile is-ancestor">
    <div class="tile is-parent">
      <article class="tile is-child box">
        <div class="table-responsive">
          <table class="table is-bordered is-striped is-narrow">
            <thead>
            <tr>
              <th v-for="c in columns">
                {{c.title}}
              </th>
            </tr>
            </thead>
            <tbody>
            <tr v-for="(item, index) in items">
              <template v-for="c in columns">
                <td v-if="c.hasOwnProperty('component')"><div :is="c.component"></div></td>
                <td v-else>{{ item[c.name] }}</td>
              </template>
            </tr>
            </tbody>
          </table>
        </div>
      </article>
    </div>
  </div>
</template>

<script>

export default {
  components: {
  },
  props: [
    'columns',
    'items'
  ],
  data: function () {
    return {
    }
  }
}

</script>

<style lang="scss" rel="stylesheet/scss">
  .table-responsive {
    display: block;
    width: 100%;
    min-height: .01%;
    overflow-x: auto;
  }
</style>

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡