阿里P7架构师,纯手写Uni-app入门教程,堪称巅峰之作

JavaScript/前端
566
0
0
2022-03-27
标签   uni-app

介绍

uni-app是什么?

是一个基于 Vue.js 的全端开发框架,开发者编写一套代码,可发布到iOS、Android、Web(响应式)、以及各种小程序、快应用等多个平台。一次开发,到处运行。

阿里P7架构师,纯手写Uni-app入门教程,堪称巅峰之作

推荐UI

uView

uni-app2018年初发布以来,一直蓬勃发展,一派欣欣向荣,社区也是人声鼎沸,众望所归。
因此,uView应运而生,uView的目标是成为uni-app生态最优秀的UI框架。
关于uView的取名来由,首字母u来自于uni-app首字母,uni-app是基于Vue.js,Vue和View(延伸为UI、视图之意)同音,同时view组件uni-app中 最基础,最重要的组件,故取名uView,表达源于uni-app和Vue之意。
基础组件的性能是高于扩展组件的。

二、uni-app基础

01 基本语法

数据的展示

定义:在data定义

使用:在tempelate中插值{{ }}使用,不需要使用this

注意点:在属性中不需要括号,属性名前需要加‘:’,这一点区别于微信小程序。

数据循环

微信小程序中的用法

wx:for="{{数据源}}" wx:for-index="index的别名" wx:for-item="item的别名"

vue中的用法

vue-for="item in 数据源" 或者 vue-for="(item,index) in 数据源"

<view v-for="(item) in list" :key="item.id">
  {{item.name}} --- {{item.id}}
</view>

// 数组
list: [
  {id:0,name:'张三'},
  {id:1,name:'李四'},
  {id:2,name:'王五'},
]
  • 条件编译

v-if:操作DOM,需要重新编译,所以不适合频繁切换

v-show:只操作样式,不管显不显示,都会存在这个元素

计算属性

类似于计算数据的处理接口,减少在模板中对数据的复杂逻辑操作,比如数据过滤,去除不要渲染的某个或某些数据

// 使用计算属性
<view>
  <view v-for="item in filterList" :key="item.id">
    {{item.name}}
  </view>
</view>
// 计算属性节点
computed:{
money(){

return "$" + this.num

},

filterList(){
    // 使用过滤return this.list.filter(item=>item.id<=0)
            }
        }

filter() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。

注意: filter() 不会对空数组进行检测,filter() 不会改变原始数组。是JS数组的方法,不是vue中的过滤器,常见的有forEach, map, filter。

02 事件

案例1:和vue用法一致

同样使用@click="handleClick"

<template></template><view><view @click="handleClick">点击</view></view>
</template>

<script>export default {
        methods:{
            handleClick () {
                console.log('view被点击了,事件被触发,函数被执行');
            }
        }
    }
</script>

<style lang="scss">

</style>

阿里P7架构师,纯手写Uni-app入门教程,堪称巅峰之作

案例2:传自定义属性

自定义属性来自微信原生小程序

<template><view><view data-index="11" @click="handleClick1($event)">点击1</view></view>
</template>

<script>export default {
        methods:{
            handleClick1 (event) {
        // event.currentTarget.dataset.indexconsole.log(event)
            }
        }
    }
</script>

<style lang="scss">
</style>

阿里P7架构师,纯手写Uni-app入门教程,堪称巅峰之作

案例3:传自定义属性+普通参数

放置的顺序可以灵活调整

<template><view><view data-index="11" @click="handleClick1($event,1)">点击1</view></view>
</template>

<script>export default {
        methods:{
            handleClick1 (event,index) {
                console.log(event);
                console.log(index);
            }
        }
    }
</script>

<style lang="scss">
</style>

阿里P7架构师,纯手写Uni-app入门教程,堪称巅峰之作

03 组件

组件的使用流程

定义、引入、注册、使用。

组件的传参

父向子:父向子先父,属性

子向父:子向父先子,事件

uni-app全局数据传递

第一种方式:在main.js中定义,使用this.baseUrl 直接调用

Vue.prototype.baseUrl = 'www.baidu.com ' + ' Vue.prototype.baseUrl'

第二种方式:在App.vue中定义,使用getApp().globalData.baseUrl 调用

globalData:{ baseUrl:'www.baidu.com ' + ' getApp().globalData.baseUrl' }

第三种方式:vue中vuex的用法,这一点参考vue官方文档。

第四种方式:本地存储,请查看官方文档API。

组件的插槽

父向子通过 slot标签占位 传递具体的标签

注意:输入框input没有颜色,表面看不见,slot标签需要被view标签包裹,否则不会显示。

04 生命周期对比

uni-app的生命周期

参考链接

应用 onlaunch 当uni-app 初始化完成时触发 App.vue

页面 onLoad 监听页面加载 页面.vue

组件 created 当组件创建完成 mounted 当组件创建完成完成 组件.vue

微信小程序的生命周期

参考链接

vue的生命周期

参考链接

三、示例项目

01 命令行创建项目

阿里P7架构师,纯手写Uni-app入门教程,堪称巅峰之作

// 安装vue脚手架
npm install -g @vue/cli

// 创建uni-app项目
vue create -p dcloudio/uni-preset-vue my-project

// 模板选择
选择默认模板

// 运行生成mp-weixin文件夹
npm run dev:mp-weixin
npm run dev:h5   // 直接在浏览器输入本地URL访问


// 如果是微信小程序,则需要导入生成的文件夹mp-weixin编译运行,位置:my-project\dist\dev\mp-weixin
打开微信开发者工具

H5运行效果

阿里P7架构师,纯手写Uni-app入门教程,堪称巅峰之作

微信小程序运行效果

阿里P7架构师,纯手写Uni-app入门教程,堪称巅峰之作

微信小程序运行效果

阿里P7架构师,纯手写Uni-app入门教程,堪称巅峰之作

02 HBuilder X面板创建项目

阿里P7架构师,纯手写Uni-app入门教程,堪称巅峰之作

03 文件结构

阿里P7架构师,纯手写Uni-app入门教程,堪称巅峰之作

阿里P7架构师,纯手写Uni-app入门教程,堪称巅峰之作

04 基本配置、清理

Sass样式使用配置

阿里P7架构师,纯手写Uni-app入门教程,堪称巅峰之作

npm install sass-loader node-sass

compile-node-sass编译插件安装

编译scss/sass为css。uni-app编译或对文件右键-外部命令编译时使用

清理示例组件的内容

<template>
</template>

<script>export default {

    }
</script>

<style>

</style>

内置Sass样式使用

<template><view class="content"><view class="rpx">rpx</view><view class="vhvw">vw</view><view class="sass">sass</view></view>
</template>

<script>export default {

    }
</script>

<style lang="scss">
.rpx{
    background-color: blanchedalmond;
    width: 750rpx;
    height: 150rpx;
}
.vhvw{
    background-color: #2B8ACE;
    width: 100vw;
    height: 10vh;
}
.sass{
    background-color: #FFC600;
  // sass内置样式的使用
    color: $uni-color-success;
}

</style>