Vue-loader: "components want vary templates" or what about is few templates into .vue file with hot reloading?

Created on 11 Jan 2018  路  5Comments  路  Source: vuejs/vue-loader

What problem does this feature solve?

#418

let's imagine an abstract situation when:

  1. component script has 1-3 functions
  2. component template has 10 tabs which use almost the same functions from component

We can't use include ./tab-1.pug, because process editing of file unbearable without hot reloading.
We can't use components system, because between original parent and needed child may be n-count any ancestors. And we will need use big deep paths as $parent.$parent.$parent or excess props.
A system in which 10 elements within themselves have similar variables and functions looks cumbersome.

simple example:

<template lang="pug">
  wrapper-content(name="settings")
    el-scrollbar
      el-tabs(v-model="tabActive" wrap-class="height-screen" fixed no-scrollbar)
        el-tab-pane(label="袨褋薪芯胁薪褘械" name="basic")
          include ./tab-basic
        el-tab-pane(label="A1" name="a1")
          include ./tab-a1
        ...
        el-tab-pane(label="Z10" name="z10")
          include ./tab-z10
</template>

End user experience concludes in situations, when components needs in interchange of templates which has convention of using functionality.
I suggest the using "the template in template" with supporting props src ... and lang (if it's realistic).
It's will be perfect for components, which have default theme, can change theme and ready for customization.

What does the proposed API look like?

<template lang="pug">
  wrapper-content(name="settings")
    el-scrollbar
      el-tabs(v-model="tabActive" wrap-class="height-screen" fixed no-scrollbar)
        el-tab-pane(label="袨褋薪芯胁薪褘械" name="basic")
          template(src="./tab-basic")
        el-tab-pane(label="A1" name="a1")
          template(src="./tab-a1")
        ...
        el-tab-pane(label="Z10" name="z10")
          template(src="./tab-z10")
</template>

Most helpful comment

Hi, maybe we can try another way to resolve this problem.

I wrote a pre-loader for your issue. See here. Hope this helps.

All 5 comments

Hi, maybe we can try another way to resolve this problem.

I wrote a pre-loader for your issue. See here. Hope this helps.

@HaoyCn it's works! good job!

My pleasure. :P

@HaoyCn what do you think, vue-loader must have it? Or should I close the issue?

@patriciussanctus I don't think that vue-loader must contain this feature cuz we can already implement it using the proposed apis like loaders and preLoaders. After all, vue-loader is too heavy already.

Was this page helpful?
0 / 5 - 0 ratings

Related issues

snoopdouglas picture snoopdouglas  路  3Comments

githoniel picture githoniel  路  3Comments

chrisvfritz picture chrisvfritz  路  4Comments

fuyan-run picture fuyan-run  路  3Comments

amorphine picture amorphine  路  3Comments