前端(五)——从 Vue.js 到 UniApp:开启一次全新的跨平台开发之旅

简介: 前端(五)——从 Vue.js 到 UniApp:开启一次全新的跨平台开发之旅

🙂博主:小猫娃来啦

🙂文章核心:从 Vue.js 到 UniApp:开启一次全新的跨平台开发之旅

文章目录

UniApp和vue.js

什么是UniApp?

UniApp是一种基于Vue.js的跨平台应用开发框架。它是由DCloud(数字天堂)开发和维护的,旨在帮助开发者使用一套代码构建同时运行在多个平台(包括iOS、Android、Web等)的应用程序。UniApp基于Vue.js框架,使用Vue.js的语法和特性来开发应用程序。开发者可以使用熟悉的Vue.js开发方式,如组件化开发、数据驱动视图等,来构建跨平台的应用程序。与此同时,UniApp提供了一套统一的API和组件库,可以让开发者在不同的平台上进行开发,并实现对原生功能的访问。开发者可以使用JavaScript或TypeScript编写业务逻辑,然后通过编译器将代码转化为各个平台的原生代码,以实现在不同平台上的运行。


UniApp的跨平台能力是通过封装和抽象底层的原生API实现的,它提供了一套统一的API,使得开发者可以在不同平台上使用相同的代码进行开发。同时,UniApp还提供了一些平台特定的功能和组件,以满足不同平台的需求。

UniApp的写法

总结一下,UniApp写法 = vue.js语法+UniApp的Api和组件

以真实项目某一个页面为例,进行一个代码展示:

<template>
  <view>
    <button v-if="data.length == 0" @click="tel" class="wanshan">
      <view class="">
        <image src="https://pic2.imgdb.cn/item/646189fc0d2dde577757c01f.png" mode=""></image>
        用户完善信息
      </view>
    </button>
    <view class="xinxi" v-if="data.length != 0"
      style="font-size: 15px;background-color: #29D86F;height: 150px;display: flex;flex-wrap: wrap;align-content: center;justify-content: center;">
      <view style="width: 30%;height: 150px;display: flex;flex-wrap: wrap;align-content: center;justify-content: center;" class="">
        <image style="width: 100%;height: 90px;margin: 10px;border-radius: 100px;" :src="Image" mode=""></image>
      </view>
      <view class="" style="width: 70%;height: 150px;display: flex;flex-wrap: wrap;align-content: center;">
          <view class="" style="font-weight: 900;font-size: 1.2rem;margin-left: 2%;">
            {{name}}
          </view>
          <view class=""
            style="width: 90%;margin-right: 5%; font-size: .8rem; display: flex;justify-content: space-between;margin-top: 20px;">
            <view class="">
              手机号:18796456464
            </view>
            <view class="">
              详情>
            </view>
          </view>
      </view>
    </view>
    <view class="yuyue" @click="tar">
      <view class="padding">
        <view class="image">
          <image style="width: 25px;height: 25px;"
            src="/static/lan.png" mode=""></image>
        </view>
        <view style="height: 50px;display: flex;flex-wrap: wrap;align-content: center;">我的预约</view>
      </view>
      <view style="height: 50px;display: flex;flex-wrap: wrap;align-content: center;">
      </view>
    </view>
    <view class="yuyue">
      <view class="padding">
        <view class="image">
          <image style="width: 25px;height: 25px;"
            src="/static/lan.png" mode=""></image>
        </view>
        <view style="height: 50px;display: flex;flex-wrap: wrap;align-content: center;">住院缴费</view>
      </view>
      <view style="height: 50px;display: flex;flex-wrap: wrap;align-content: center;">
      </view>
    </view>
    <view class="dibu">
      <view @click="index">
        <view class="">
          <image src="/static/cd2.png" mode=""></image>
        </view>
        <view class="">
          首页
        </view>
      </view>
      <view>
        <view class="">
          <image src="/static/gz1.png" mode=""></image>
        </view>
        <view class="">
          个人中心
        </view>
      </view>
    </view>
  </view>
</template>
<script>
  export default {
    data() {
      return {
        data: [],
        Image: 'https://img1.baidu.com/it/u=1960110688,1786190632&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=281',
        name:''
      }
    },
    onShow() {
      let that = this
      that.name = uni.getStorageSync('user')
      if (uni.getStorageSync('userid') != '' || uni.getStorageSync('userid') != undefined) {
        uni.request({
          url: '接口文档的接口地址',
          data: {
            uid: uni.getStorageSync('userid')
          },
          method: 'GET',
          success: function(res) {
            that.Image = uni.getStorageSync('headimg')
            that.data = res.data.info
            console.log(res.data);
          }
        })
      }
    },
    methods: {
      tar() {
        if(uni.getStorageSync('userid') != ''&& uni.getStorageSync('userid') != undefined){
          uni.navigateTo({
            url: '/pages/yuyue/index'
          })
        }else{
          uni.showToast({
            title:'请先授权登录',
            icon:'error'
          })
        }
      },      
      tel() {
        uni.navigateTo({
          url: '/pages/info/index'
        })
      },
      index(){
        uni.navigateTo({
          url:'/pages/index/index'
        })
      }
    }
  }
</script>
<style lang="scss">
  .xinxi {
    width: 100%;
    display: flex;
  }
  .wanshan {
    width: 100%;
    height: 150px;
    background-color: #29D86F;
    display: flex;
    flex-wrap: wrap;
    align-content: center;
    justify-content: center;
    font-weight: 1000px;
  }
  .wanshan image {
    width: 20px;
    height: 20px;
  }
  .padding {
    width: 30%;
    display: flex;
    justify-content: space-between;
    height: 50px;
    flex-wrap: wrap;
    align-content: center;
  }
  .image {
    width: 30px;
    height: 30px;
    border-radius: 50%;
    display: flex;
    justify-content: center;
    flex-wrap: wrap;
    align-content: center;
    border-radius: 100px;
    margin-top: 10px;
  }
  .image image{
    width: 30px;
    height: 30px;
    border-radius: 50%;
  }
  .margin {
    width: 100%;
    height: 150px;
    background-color: #29D86F;
  }
  .yuyue {
    width: 90%;
    margin-left: 5%;
    display: flex;
    justify-content: space-between;
    height: 50px;
    flex-wrap: wrap;
    align-content: center;
    border-bottom: 1px solid #e5e5e5;
  }
  .dibu{
    width: 100% ;
    position: fixed;
    bottom: 0;
    border-top: 1px solid #dfdfdf;
    display: flex;
    padding: 3% 0;
    justify-content: space-around;
    font-size: .8rem;
  }
  .dibu image:first-child{
    width: 60rpx;
    height: 60rpx;
  }
  .dibu>view>view:first-child{
    width: 150rpx;
    display: flex;
    justify-content: center;
  }
  .dibu>view>view:last-child{
    width: 150rpx;
    text-align: center;
  }
</style>

什么是vue.js?

Vue.js是一种流行的开源JavaScript框架,用于构建用户界面。它被设计为一种用于构建可复用、高效、响应式的Web应用程序的渐进式框架。Vue.js的核心思想是通过将应用程序分解为组件化的方式来构建用户界面。每个组件包含了自己的模板、逻辑和样式,并可以根据需要进行组合和重用。这种组件化的开发方式使得Vue.js具有很高的灵活性和可维护性。


Vue.js采用了基于HTML的模板语法,使得开发人员可以直接在模板中使用数据绑定、事件处理等功能,快速地构建交互式的用户界面。Vue.js还提供了响应式的数据绑定机制,当数据发生变化时,界面会自动更新,简化了开发复杂的数据驱动应用程序的过程。


除了核心库之外,Vue.js还拥有丰富的生态系统,包括路由器、状态管理、表单验证等插件,可以帮助开发者快速构建功能完善的Web应用程序。

UniApp与vue.js是什么关系?

UniApp在底层使用了Vue.js作为其核心框架,并扩展了一些额外的API和组件,使得开发者可以方便地编写一次性代码,然后通过编译器将其转换为不同平台上的原生代码,从而实现跨平台开发。
UniApp与Vue.js之间的关系可以类比于Vue.js与浏览器的关系。


Vue.js是一个用于构建用户界面的JavaScript框架,它专注于前端开发,并提供了响应式数据绑定、组件化开发等特性。而UniApp则是在Vue.js的基础上进行扩展,使得开发者可以将Vue.js的代码用于移动端和其他平台的应用开发,大大提高了开发效率和代码复用性。

为什么不直接用vue.js开发,而选择UniApp

UniApp的优势在哪?

既然uniapp是基于vue.js的,那为什么不直接使用Vue.js开发跨平台应用,而要使用UniApp呢?

因为UniApp更有优势。

UniApp相对于纯粹的Vue.js开发跨平台应用有以下优势:跨平台能力:UniApp提供了一套统一的API和组件库,可以在多个平台上运行,包括iOS、Android、Web等。开发者只需编写一套代码,即可在不同平台上部署和运行应用,减少了开发和维护的工作量。

原生功能访问:UniApp封装了底层的原生API,使得开发者可以通过统一的API访问平台特定的原生功能,如相机、地理位置、文件系统等。这样开发者可以在跨平台应用中使用原生功能,提供更好的用户体验。

性能优化:UniApp在底层做了一些性能优化,如虚拟DOM渲染、异步渲染等,以提高应用的性能和响应速度。

社区和生态系统:UniApp拥有庞大的开发者社区和丰富的生态系统,可以提供各种插件、组件和解决方案,方便开发者快速开发和解决问题。

开发效率:UniApp采用了Vue.js的开发方式和语法,开发者可以使用熟悉的Vue.js开发技术栈,减少学习成本和开发周期。

vue3和UniAppvue3比vue2优秀,如果用vue3写法来写UniApp,肯定会更好。但就现阶段而言,UniApp中很少见到vue3的写法,但是某些论坛和开发者社区中有大牛会用vue3来尝试。


目前在UniApp中较少使用Vue 3的主要原因是UniApp还没有完全支持Vue 3。虽然Vue 3已经发布,但由于Vue 3引入了一些重大的改进和变化,与Vue 2存在一些不兼容之处,因此需要相应的调整和适配。


UniApp团队正在积极地进行Vue 3的适配工作,以确保UniApp能够与Vue 3兼容并支持其新的特性和语法。然而,由于Vue 3的变化较大,适配工作需要一定的时间和精力。


此外,Vue 2在使用UniApp开发跨平台应用方面已经得到了广泛的应用和验证,许多开发者已经掌握了Vue 2的开发技能和经验,并且已经使用Vue 2开发了许多UniApp应用。因此,在Vue 3的适配工作完成之前,开发者会倾向于继续使用Vue 2来开发UniApp应用,以保持开发的稳定性和一致性。


展望与准备

目前来看,UniApp在跨平台开发领域有着广泛的应用和较高的市场份额。


虽然UniApp目前在跨平台开发中表现出色,但技术发展是一个不断变化的过程,未来肯定会有新的技术涌现,并可能有一些技术能够在某些方面提供更好的解决方案。因此,不能完全排除其他技术会取代UniApp的可能性。


虽然可能会有其他技术或者新概念横空出世,但目前的UniApp仍然是一种强大且成熟的跨平台开发框架,为开发者提供了高效、便捷的应用开发方式。如果你正在考虑使用UniApp进行开发,可以继续关注该框架的更新和发展,同时也可以留意其他新技术的出现。


没有任何一种技术可独霸武林,如果现有技术可以支持现有开发,并能不断更新,那自然是最好的,毕竟UniApp是中国的,爱国情怀还是有的。但看待技术的迭代要理智和冷静。不管未来技术如何变革,最重要的是人,我们作为开发者应在变化中找到不变的点,以不变应万变,我想这才是真正解决问题的能力与个人的价值体现。


相关文章
|
3天前
|
前端开发 JavaScript
前端ES5 | js —添加元素方法
前端ES5 | js —添加元素方法
|
4天前
|
JavaScript 前端开发
前端JS函数
【9月更文挑战第4天】前端JS函数
18 6
|
8天前
|
开发者 图形学 开发工具
Unity编辑器神级扩展攻略:从批量操作到定制Inspector界面,手把手教你编写高效开发工具,解锁编辑器隐藏潜能
【8月更文挑战第31天】Unity是一款强大的游戏开发引擎,支持多平台发布与高度可定制的编辑器环境。通过自定义编辑器工具,开发者能显著提升工作效率。本文介绍如何使用C#脚本扩展Unity编辑器功能,包括批量调整游戏对象位置、创建自定义Inspector界面及项目统计窗口等实用工具,并提供具体示例代码。理解并应用这些技巧,可大幅优化开发流程,提高生产力。
27 1
|
8天前
|
开发者 图形学 C#
深度解密:Unity游戏开发中的动画艺术——Mecanim状态机如何让游戏角色栩栩如生:从基础设置到高级状态切换的全面指南,助你打造流畅自然的游戏动画体验
【8月更文挑战第31天】Unity动画系统是游戏开发的关键部分,尤其适用于复杂角色动画。本文通过具体案例讲解Mecanim动画状态机的使用方法及原理。我们创建一个游戏角色并设计行走、奔跑和攻击动画,详细介绍动画状态机设置及脚本控制。首先导入动画资源并添加Animator组件,然后创建Animator Controller并设置状态间的转换条件。通过编写C#脚本(如PlayerMovement)控制动画状态切换,实现基于玩家输入的动画过渡。此方法不仅适用于游戏角色,还可用于任何需动态动画响应的对象,增强游戏的真实感与互动性。
26 0
|
8天前
|
前端开发 Java Spring
Spring与Angular/React/Vue:当后端大佬遇上前端三杰,会擦出怎样的火花?一场技术的盛宴,你准备好了吗?
【8月更文挑战第31天】Spring框架与Angular、React、Vue等前端框架的集成是现代Web应用开发的核心。通过RESTful API、WebSocket及GraphQL等方式,Spring能与前端框架高效互动,提供快速且功能丰富的应用。RESTful API简单有效,适用于基本数据交互;WebSocket支持实时通信,适合聊天应用和数据监控;GraphQL则提供更精确的数据查询能力。开发者可根据需求选择合适的集成方式,提升用户体验和应用功能。
36 0
|
8天前
|
Android开发 iOS开发 C#
Xamarin:用C#打造跨平台移动应用的终极利器——从零开始构建你的第一个iOS与Android通用App,体验前所未有的高效与便捷开发之旅
【8月更文挑战第31天】Xamarin 是一个强大的框架,允许开发者使用单一的 C# 代码库构建高性能的原生移动应用,支持 iOS、Android 和 Windows 平台。作为微软的一部分,Xamarin 充分利用了 .NET 框架的强大功能,提供了丰富的 API 和工具集,简化了跨平台移动应用开发。本文通过一个简单的示例应用介绍了如何使用 Xamarin.Forms 快速创建跨平台应用,包括设置开发环境、定义用户界面和实现按钮点击事件处理逻辑。这个示例展示了 Xamarin.Forms 的基本功能,帮助开发者提高开发效率并实现一致的用户体验。
14 0
|
8天前
|
开发者 C# Android开发
明白吗?Xamarin与Native的终极对决:究竟哪种开发方式更适合您的项目需求,让我们一探究竟!
【8月更文挑战第31天】随着移动应用开发的普及,开发者面临多种技术选择。本文对比了跨平台解决方案Xamarin与原生开发方式的优势与劣势。Xamarin使用C#进行跨平台开发,代码复用率高,可大幅降低开发成本;但因基于抽象层,可能影响性能。原生开发则充分利用平台特性,提供最佳用户体验,但需维护多套代码库,增加工作量。开发者应根据项目需求、团队技能和预算综合考量,选择最适合的开发方式。
47 0
|
8天前
|
开发者 Android开发 iOS开发
Xamarin开发者的神器!揭秘你绝不能错过的插件和工具,让你的开发效率飞跃式提升
【8月更文挑战第31天】Xamarin.Forms 是一个强大的框架,让开发者通过单一共享代码库构建跨平台移动应用,支持 iOS、Android 和 Windows。使用 C# 和 XAML,它简化了多平台开发流程,保持一致的用户体验。本指南通过创建一个简单的 “HelloXamarin” 应用介绍 Xamarin.Forms 的基本功能和工作原理。首先配置 Visual Studio 开发环境,然后创建并运行一个包含标题、按钮和消息标签的示例应用,展示如何定义界面布局及处理按钮点击事件。这帮助开发者快速入门 Xamarin.Forms,提高跨平台应用开发效率。
21 0
|
8天前
|
前端开发 Java UED
JSF 面向组件开发究竟藏着何种奥秘?带你探寻可复用 UI 组件设计的神秘之路
【8月更文挑战第31天】在现代软件开发中,高效与可维护性至关重要。JavaServer Faces(JSF)框架通过其面向组件的开发模式,提供了构建复杂用户界面的强大工具,特别适用于设计可复用的 UI 组件。通过合理设计组件的功能与外观,可以显著提高开发效率并降低维护成本。本文以一个具体的 `MessageComponent` 示例展示了如何创建可复用的 JSF 组件,并介绍了如何在 JSF 页面中使用这些组件。结合其他技术如 PrimeFaces 和 Bootstrap,可以进一步丰富组件库,提升用户体验。
14 0
|
8天前
|
API UED 开发者
如何在Uno Platform中轻松实现流畅动画效果——从基础到优化,全方位打造用户友好的动态交互体验!
【8月更文挑战第31天】在开发跨平台应用时,确保用户界面流畅且具吸引力至关重要。Uno Platform 作为多端统一的开发框架,不仅支持跨系统应用开发,还能通过优化实现流畅动画,增强用户体验。本文探讨了Uno Platform中实现流畅动画的多个方面,包括动画基础、性能优化、实践技巧及问题排查,帮助开发者掌握具体优化策略,提升应用质量与用户满意度。通过合理利用故事板、减少布局复杂性、使用硬件加速等技术,结合异步方法与预设缓存技巧,开发者能够创建美观且流畅的动画效果。
27 0
下一篇
DDNS