Vue3渐进式增强,运用CDN在项目中引入Vue3,超简单

一、目的

1.1 发现当不使用构建方式的情况下(因为项目小没必要)引入Vue3,官方文档并没有给出很详细的使用思路,对于踩到的坑,就简单记录一下。
1.2 本文主要是使用CDN引入的,记录基本步骤和注意事项
1.3 尝试本地引入,但可能由于后端是flask的原因,我没有跑通,有会的请教教我。

二、使用到的资源

2.1 Vue3 => 3.3.4
2.2 elementPlus => 2.3.12
2.3 axios => 1.5.0
2.4 flask => 求其不打紧

三、总体思路

 选择合适的cdn引入  =>  
 定义根组件并挂载    =>  
 定义子组件并注册    =>  
 父、子组件间参数的传递    =>  
 通过axios发送数据到后端处理

四、Vue3

4.1导入Vue3

4.1.1选择CDN:

// 在html的<head>内引入,好似下面这样,我这边使用了bootcdn链接: [link](https://https://www.bootcdn.cn/all/)的,因为比较顺眼,主要官网中提供的CDN很容易挂
  <script src="https://cdn.bootcdn.net/ajax/libs/vue/3.3.4/vue.global.prod.js"></script>

4.1.2 CDN版本选择
注意:我们打开bootcdn网站,发现会有很多版本的,例如vue.global.prod.js、vue.esm-browser.min.js等。注意几个关键词,其中global是指提供一个全局的Vue属性、esm-browser是可以使用

4.1.3导入CDN方式
本次项目主要介绍vue.global.prod.js、vue.esm-browser.prod.js使用上的区别的区别。

 4.1.3.1    vue.global.prod.js    =>  在head中使用 <script src="https://cdn.bootcdn.net/ajax/libs/vue/3.3.4/vue.global.prod.js"></script>引入后,在后续根组件和子组件中可以通过全局的Vue,来引入对应ref、createApp等方法,如下:
const app = Vue.createApp({
/* 根组件选项 */
   },
 4.1.3.2    vue.esm-browser.prod.js    =>  可以在页面<script type="module"></script>内使用导入,如下:
//第1步:需要什么就引入什么
import { createApp,ref } from 'https://cdn.bootcdn.net/ajax/libs/vue/3.3.4/vue.esm-browser.prod.js'
//第2步:不需要写Vue.了
const app = createApp({
/* 根组件选项 */
   },

本文使用vue.global.prod.js方式,没那么简洁,但方便

4.1.4注意事项:

4.2根组件建立并挂载

4.2.1基本的步骤:,在script type="module"内完成如下代码就完成根组件创建:

//1、创建根组件
const app = Vue.createApp({
/* 根组件选项 */
   },
//2、挂载插件ElementPlus
app.use(ElementPlus)
//3、挂载根组件
app.mount('#app')
// 4、处理错误
app.config.errorHandler = (err) => {
/* 处理错误 */
console.log("出现错误:")
console.error(err)
}

4.2.2根组件选项: 根组件内可以定义一些参数、方法之类:

// 根组件选项
   components: {
      landMain
   },
   setup(){
      // 定义一个message
      const message = Vue.ref('确认')
      return {
         message
      }
   },

4.2.2html内编写代码: 然后所有根组件定义的代码都可以作用在div id="app"内了。

<div id="app">

</div>

4.3js子组件建立并在根组件注册

和构建可以使用.vue组件不同,cdn引入只能使用js组件
4.3.1使用js子组件步骤
第1步:定义js子组件,js子组件以单独文件的形式。

//1、在static/js内定义landMain文件,相对路径../static/js/landMain.js
export default {
    name : "landMain",
    components: {
     },
    setup(){
        // 测试可删
        const landvalue = Vue.ref('土地信息')
        return {
            landvalue
        }
     },
    methods:{
    },
    mounted() {
    },
    template:`
         {{ landvalue }}
         <el-divider content-position="center">选择行政区</el-divider>             
    </el-main>
       `
  }

第2步:通过import形式在根组件所在代码块内引入。

import landMain from '../static/js/landMain.js'  

第3步:通过根组件选项中的components: {} 注册子组件。

const app = Vue.createApp({
   /* 根组件选项 */
   components: {
      landMain
   },
},

第4步:在 id="app"内使用子组件:

<!-- 根组件 -->
<div id="app">
    <land-main> </land-main>
</div>

4.3.2注意事项

4.3.2.1:驼峰规则
注意上述4.3.1中的第4步写的是land-main,而不是landMain,要注意。
4.3.2.2:template问题
template内使用的是模版字符串:``,不是"",也不是’'。
4.3.2.3:style问题
注意不能在js组件中template内定义style,也没有单独的 style选项用来定义CSS,目前我看只能用最传统的方式:

<link rel=stylesheet href="../static/css/component6011.css" type="text/css"/>
有别的办法的请教教我

4.4全局组件

// 注册全局组件
//注册之后就可以在id="app"的任意地方使用了,但最后尽量避免,因为会造成父子关系不明确
 app
    .component('landMain',landMain)  //按钮
    .component('component601',component601)  //联级选择器
    .component('component602',component602)  //单选框
    .component('component603',component603)  //选择器
    .component('component605',component605)  //日期选择器

4.5组件通讯

4.5.1子组件 => 父组件(参数传递)
建议使用ref
第1步,先在父组件定义一个参数,例如childRef:

setup(){
      // 子组件传递参数给父组件
      const childRef = Vue.ref()
      return {
         childRef
      }
   },

第2步,在html元素内,定义ref,注意:必须与上述参数名称一致

<!-- 根组件 -->
<div id="app">
    <land-main ref="childRef"> </land-main>
</div>

第3步,就可以测试取值是否成功了。

//取得landMain子组件下在setup中定义的属性值landvalue
console.log(`这个mounted实例的属性:${this.childRef.landvalue}`) 

4.5.2父组件 => 子组件(参数传递)
建议使用provide、inject
第1步 在父组件中provide

  setup(){
      // 测试代码,可删
      const message = Vue.ref('确认')
      return {
         message
      }
   },
   provide() {
      // 测试代码,测试父组件传递参数给子组件,inject => child.js,可删
      //注意提供的参数要先computed一下,不然不会动态响应
      return {
         ParMessage: Vue.computed(() => this.message)
      }
   },

第2步 在子组件中inject:

    setup(){
        const ParMessage = Vue.inject('ParMessage')
        return {
            ParMessage
        }
     },

五、elementPlus

第1步 在head中通过CDN方式引入:

 可以参考官方文档,不介绍了

第2步 在根组件中使用app.use(ElementPlus),就能在所有地方使用app.use(ElementPlus)了

六、结尾

到时更新

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值