Vue 는 전역 구성 요 소 를 만 들 고 Vue.use()불 러 오 는 방식 을 사용 합 니 다.

vue 구성 요 소 를 사용자 정의 합 니 다.일반적으로 부분 참조 방식 으로 불 러 옵 니 다.사용 할 때 사용 하 는 구성 요소 에 import moduleName from'module'가 져 오기,components 에 등록 합 니 다.

<template>
 <div class="app-NewsInfo">
 <h3>{{info.title}}</h3>
 <!--        。 -->
 <comment :id="id"></comment>
 </div>
</template>
<script>
import comment from "../sub/comment.vue";
export default {
 data() {
 return {
  info: {},
  id: this.$route.query.id
 };
 },
 methods: {},
 components: {
 comment
 },
</script>
만약 어떤 구성 요소 가 자주 복용 된다 면,매번 새로운 구성 요소 에서 인용 할 때마다 한 번 씩 가 져 오지 않 겠 는가?예.이 경우 구성 요 소 를 전역 구성 요소 로 밀봉 할 수 있 습 니 다.한 번 가 져 오 면 전역 에서 사용 할 수 있 습 니 다.흔 치 않 지만 정리 하 자.
1.우선 폴 더 loading 만 들 기
전역 참조 가 필요 한 구성 요 소 를 저장 하고 설정 파일 을 저장 합 니 다.

2.loading.vue 구성 요 소 를 만 듭 니 다.
이 구성 요소 에는 구성 요소 의 기본 구 조 를 제외 하고 다른 내용 이 없습니다.사용자 정의 구성 요 소 를 불 러 오 는 역할 을 합 니 다.마지막 으로 loading 구성 요 소 를 전역 Vue 에 불 러 오 면 모든 사용자 정의 구성 요 소 를 한꺼번에 불 러 오 는 것 이 편리 합 니 다.

<template>
 <div class="loading"></div>
</template>

<script>
export default {
 data() {
 return {};
 },
 methods: {}
};
</script>
<style scoped>
</style>
3.사용자 정의 구성 요소 만 들 기
여기 에는 간단하게 포 장 된 mint-ui 윤파 도 를 예 로 들 수 있다.

<template>
 <div class="app-turns">
 <mt-swipe :auto="4000">
  <mt-swipe-item v-for="(item,i) of list" :key="i">
  <img :src="item.img_url" @click="detail" :data-id="item.id">
  </mt-swipe-item>
 </mt-swipe>
 </div>
</template>

<script>
export default {
 name: "navbar",
 props: ["list"], //       
 data() {
 return {
 };
 },
 methods: {
 detail(e) {
  var id = e.target.dataset.id;
  var url = `/GoodsInfo/${id}`;
  this.$router.push(url);
 }
 },
 created() {}
};
</script>
<style scoped>
.mint-swipe {
 height: 150px;
}
.mint-swipe img {
 width: 100%;
}
</style>
4.index.js 를 만 들 고 모든 사용자 정의 구성 요 소 를 내 보 냅 니 다.

import turns from './turns.vue'

const loading = {
 install: function (Vue) {
 Vue.component('turns', turns)
 }
}

export default loading;
사실 여기까지 구성 요소 패 키 징 이 끝 났 습 니 다.어떻게 사용 하 는 지 보 여 드 리 겠 습 니 다.
5.main.js 에서 loading 구성 요 소 를 가 져 오고 사용 합 니 다.
import loading from './lib/loading';
Vue.use(loading);
이렇게 하면 구성 요 소 를 전역 적 으로 인용 하 는 데 성 공 했 습 니 다!
6.사용 할 곳 에 서 는 구성 요소 이름 을 직접 사용 하면 됩 니 다.

<template>
 <div class="app-home">
 <turns :list="list"></turns>
 </div>
</template>
이런 방식 을 통 해 구성 요소 의 전역 인용 을 실현 할 수 있다.
이러한 장점 은 재 활용 성 이 매우 높 은 구성 요소 에 대해 매번 가 져 오 는 번 거 로 움 을 줄 이 는 것 이다.
단점 은 구성 요소 의 도입 과 등록 을 직관 적 으로 볼 수 없고 잘 모 르 는 사람 에 게 는 구성 요소 이름 의 의 미 를 알 아 볼 수 없다 는 것 이다.
사실 공식 문서 에서 해결 방안 이 언급 되 었 다.
https://cn.vuejs.org/v2/guide/components-registration.html#기본 구성 요소 의 자동화 전역 등록
기본 구성 요소 의 자동화 전역 등록
아마도 많은 구성 요소 들 이 입력 상자 나 단추 같은 요소 만 감 싸 고 있 을 것 입 니 다.상대 적 으로 통용 되 는 것 입 니 다.우 리 는 때때로 그것들 을 기본 구성 요소 라 고 부 르 는데,그것들 은 각 구성 요소 에서 자주 사용 된다.
그래서 많은 구성 요소 에 기본 구성 요 소 를 포함 하 는 긴 목록 이 있 습 니 다.

import BaseButton from ‘./BaseButton.vue' import BaseIcon from
‘./BaseIcon.vue' import BaseInput from ‘./BaseInput.vue'

export default { components: {
BaseButton,
BaseIcon,
BaseInput } } 
템 플 릿 의 일부분 에 만 사 용 됩 니 다:


다행히 웹 팩(또는 내부 에 웹 팩 을 사용 한 Vue CLI 3+)을 사용 했다 면 require.context 를 사용 하여 매우 통용 되 는 기본 구성 요소 만 전역 적 으로 등록 할 수 있 습 니 다.입구 파일(예 를 들 어 src/main.js)에서 기본 구성 요 소 를 전역 적 으로 가 져 올 수 있 는 예제 코드 가 있 습 니 다.

import Vue from ‘vue' import upperFirst from ‘lodash/upperFirst'
import camelCase from ‘lodash/camelCase'

const requireComponent = require.context( //           
‘./components', //          false, //                
/Base[A-Z]\w+.(vue|js)$/ )

requireComponent.keys().forEach(fileName => { //        const
componentConfig = requireComponent(fileName)

//       PascalCase    const componentName = upperFirst(
camelCase(
//          ./        
fileName.replace(/^./(.*).\w+$/, ‘$1')
) )

//        Vue.component(
componentName,
//             export default    ,
//          .default,
//            。
componentConfig.default || componentConfig ) })
추가 지식:vue 구성 요소 등록 Vue.extend Vue.component Vue.use 사용 및 구성 요소 내장
긴 말 안 할 게 요.그냥 코드 보 세 요~

/**
 *  vue.extend  
 *       Vue    ,    “  ”。              。
 *    :              
 */

 const Profile = Vue.extend({
 template: '<p>{{firstName}} {{lastName}} aka {{alias}}</p>',
 data: function () {
  return {
  firstName: 'Walter',
  lastName: 'White',
  alias: 'Heisenberg'
  }
 }
 })
 //    Profile   ,         。
 new Profile().$mount('#opp')

let navbar = {
 template: `<div class='nav'>
     <input type="text" placeholder="      "/>
    </div>`, 
 data:()=>{
  return {
  }
 },
 mounted() {
  console.log(this.$parent)
 }
};

const MyPlugin = {
 install:(vue, arguments)=>{
  console.log(arguments);
  vue.component('navbar', navbar);
 }
}

Vue.use(MyPlugin, {a:1, b:2}); //       

// logo  
Vue.component("logo", {
 template: `<div class='logo'>
     <img v-bind:src="logoSrc">
    </div>`,
 inject: ['logoSrc'],  
 data:()=>{
  return {
  }
 },
 mounted() {
  console.log(this.$parent)
 }
})
// header        provie inject  
Vue.component("buttoncounter", {
 template: `<div class='header'>
    <logo></logo>
    {{header}}
    </div>`,
 provide:{
  logoSrc:'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1582433251882&di=de459decf2e157552b97a4879ae4135d&imgtype=0&src=http%3A%2F%2Fwww.suntop168.com%2Fblog%2Fzb_users%2Fupload%2F2014%2F2%2Fadf89182.jpg'
 },
 data:()=>{
  return {
   header:'       '
  }
 },
 mounted() {
  console.log(this.$parent)
 }
});

// vue   
let vm = new Vue({
 el:"#app",
 data:{
  name: 'Marry'
 },
 mounted(){
  console.log('vue        ')
 }
})

console.log(vm);
이 Vue 는 전역 구성 요 소 를 만 들 고 Vue.use()불 러 오 는 방식 을 사용 하 는 것 이 바로 작은 편집 이 여러분 에 게 공유 하 는 모든 내용 입 니 다.참고 가 되 고 저 희 를 많이 사랑 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기