In PHP
when we include code from another file, we include it and that's it, the code is now available to us within the file in which we performed the include. But in Vue.js
, after importing a component we must also export it.
Why? Why don't we simply import it?
Using export default: You can use export-default for creating local registration for the Vue component.
Vue Components are one of the important features of VueJS that creates custom elements, which can be reused in HTML.
Since components are reusable Vue instances, they accept the same options as new Vue , such as data , computed , watch , methods , and lifecycle hooks. The only exceptions are a few root-specific options like el .
STEP 01: First, Import the Child Component into the Parent Component inside script tag but above export default function declaration. STEP 02: Then, Register the Child Component inside the Parent Component by adding it to components object. STEP 03: Finally, Use the Child Component in the Parent Component Template.
Components in vue
can be tricky. If you haven't yet, I would highly recommend reading the documentation on the vue.js website on how component registration works, specifically, as tony19 mentions global and local registration. The code example you show in your screenshot is actually doing a couple of things. For one, it is making the components available locally, and only locally (as in that .vue file) for use. In addition, it is making it available to the template as the key
you provide in the components
object, in this case, app-user-detail
and app-user-edit
instead of user-detail
and user-edit
.
Importantly, it should be mentioned that an import
is not actually required for this component registration to function. You could have multiple components defined in a single file. The components
key gives a way to identify what that component is using. So that import
isn't required, so vue
does require the components
key to understand what you are using as a component, and what is just other code.
Finally, as some of the other answers have alluded to, the components
key is not actually an export. The default signature of a vue
component requires an export
but this is not exporting the components listed under the components
key. What it is doing is letting vue
build in a top down manner. Depending on what the rest of your application setup looks like, you may be using single file components, or not. Either way, vue
will start with the top level vue instance
and work its way down through components, with the exception of global registration, no top level component knows which components are being used below it.
This means for vue
to render things properly, each component has to include a reference to the extra components it uses. This reference is exported as part of the higher level component (in your case User.vue
), but is not the component itself (UserDetail.vue
).
So it may appear that vue
requires a second export after import, but it is actually doing something else to allow the root vue instance to render your component.
As an aside, the vue documentation on this subject really is quite good, if you haven't already please take a look at the sections I linked above. There is an additional section on module import/export systems that seems highly relevant to what you are asking, you can find that here: Module-systems.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With