关于uniapp的知识点
1、uniapp怎么进行路由跳转?
一、uni.navigateTo(OBJECT)
保留当前页面(跳转新的页面),跳转到应用内的某个页面,使用uni.navigateBack可以返回到原页面(非tabBar注册页面使用该方法)
methods: {
toPath(){
//跳转非pages.json>tabbar>配置过的页面,使用navigateTo
//跳转时保留老页面,一般用于需要返回
uni.navigateTo({
url:"…/one/one"
})
}
}
uni.navigateTo(object)必填参数url
其他参数:
传参:
//在起始页面跳转到test.vue页面并传递参数
uni.navigateTo({
url: ‘test?id=1&name=uniapp’
});
在test.vue页面接受参数:
export default {
onLoad: function (option) { //option为object类型,会序列化上个页面传递的参数
console.log(option.id); //打印出上个页面传递的参数。
console.log(option.name); //打印出上个页面传递的参数。
}
}
二、uni.redirectTo(OBJECT)
关闭当前页面,跳转到应用内的某个页面。(url参数必须填写)
实例:
methods: {
toPath(){
uni.redirectTo({
url:"…/two/two"//关闭当前页面跳转到two页面
})
}
}
实例:uni.reLaunch({
url: ‘test?id=1’//带参数(如果跳转的页面路径是 tabBar 页面则不能带参数)
});
export default {
onLoad: function (option) {
console.log(option.id);
}
}
四、uni.switchTab(OBJECT)
跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面(url参数必须填写)
跳转到 tabBar 页面只能使用 switchTab 跳转
methods: {
toPath(){
//跳转pages.json>tabbar>配置过的页面,使用switchTab
uni.switchTab({
url:"…/news/news"//需要跳转的 tabBar 页面的路径(需在 pages.json 的 tabBar 字段定义的页面),路径后不能带参数
})
}
}
注意:调用 navigateTo 跳转时,调用该方法的页面会被加入堆栈,而 redirectTo 方法则不会
// 此处是A页面
uni.navigateTo({
url: ‘B?id=1’
});
// 此处是B页面
uni.navigateTo({
url: ‘C?id=1’
});
// 在C页面内 navigateBack,将返回A页面
uni.navigateBack({
delta: 2
});
提示:
navigateTo, redirectTo 只能打开非 tabBar 页面。
switchTab 只能打开 tabBar 页面。
reLaunch 可以打开任意页面。
页面底部的 tabBar 由页面决定,即只要是定义为 tabBar 的页面,底部都有 tabBar。
不能在 App.vue 里面进行页面跳转。
2、怎么配置tabbar
详情在:https://uniapp.dcloud.io/collocation/pages?id=tabbar
在pages.json中配置:
“tabBar”: {
“color”: “#7A7E83”,
“selectedColor”: “#3cc51f”,
“borderStyle”: “black”,
“backgroundColor”: “#ffffff”,
“list”: [{
“pagePath”: “pages/component/index”,
“iconPath”: “static/image/icon_component.png”,
“selectedIconPath”: “static/image/icon_component_HL.png”,
“text”: “首页”
}, {
“pagePath”: “pages/API/index”,
“iconPath”: “static/image/icon_API.png”,
“selectedIconPath”: “static/image/icon_API_HL.png”,
“text”: “我的”
}]
}
3、如何请求接口
请求接口是自己封装的
const baseUrl =“http://ceshi2.dishait.cn/api/v1/”;
let request = function(url,data={},method=“GET”){
uni.showLoading({
title: “加载中”
})
return new Promise((resolve,reject)=>{
uni.request({
url: "/api"+url, //仅为示例,并非真实接口地址。
data,
method,
timeout:6000,
header: {
'custom-header': 'hello', //自定义请求头信息
"content-type": "application/x-www-form-urlencoded",
"token":uni.getStorageSync("token")
},
success: (res) => {
resolve(res)
},
fail:(res)=>{
reject(res)
},
// 结束loading
complete: (e) => {
uni.hideLoading()
}
});
})
}
module.exports=request
然后在main.js中引入全局设置
import hmw from ‘./utils/hmw.js’
Vue.prototype.hmw = hmw
在页面中是
this.hmw(")
4、 从uniapp使用的开发软件,到创建,到运行,如何打包不同平台的代码,如何打包apk,云打包,如何运行在不同的端
先进入HBuilder X,里面有个文件然后新建然后项目创建就可以了
打包:
如何运行在不同端:
5、如何使用组件
https://uniapp.dcloud.io/component/README
6、基础语法是什么
开发工具
HBuilderX,如果要开发uni-app肯定是官方的工具支持最好。
介绍
uni-app官方推荐使用flex布局,兼容性最好。
代码里的语法是小程序和vue的结合,uni-app之所以能兼容多平台也是因为小程序的出现。
并不是所有的代码都可以跑不同平台,有时候需要对不同平台进行独立编写。
工具
在HBuilderX工具里直接创建一个uni-app项目,就可以开始基础语法练习了。
模版语法与数据绑定
//正确用法,使用函数返回对象
data() {
return {
title: ‘Hello’
}
}
//错误写法,会导致再次打开页面时,显示上次数据
data: {
title: ‘Hello’
}
通过下面的方法引用数据:
标题: {{ title }}
条件渲染
v-else 元素必须紧跟在带 v-if 或者 v-else-if 的元素的后面,否则它将不会被识别。
在data数据里,awesome为true的时候展示Vue is awesome.
Vue is awesome!
Oh no ????
**列表渲染** in和of都可以用做循环,没有区别 item是循环的内容,index是索引- {{ item.message }}
var example1 = new Vue({
el: ‘#example-1’,
data: {
items: [
{ message: ‘Foo’ },
{ message: ‘Bar’ }
]
}
})
基础组建
uni-app为开发者提供了一系列基础组件,类似HTML里的基础标签元素。但uni-app的组件与HTML不同,而是与小程序相同,更适合手机端使用。
了解View和ScrollView的内容(点击小标题可以传送过去)
自定义组件
先了解Vue组件的基础
传统vue组件,需要安装、引用、注册,三个步骤后才能使用组件。在uni-app里的easycom将其精简为一步。 只要组件安装在项目的components目录下,并符合components/组件名称/组件名称.vue目录结构。就可以不用引用、注册,直接在页面中使用。 如下:
注:HBuilderX 2.5.5起支持easycom组件模式。
条件编译
条件编译是用特殊的注释作为标记,在编译时根据这些特殊的注释,将注释里面的代码编译到不同平台。
下面的简单例子,点我见更多详细https://blog.csdn.net/Aaren_Jiang/article/details/105923431?ops_request_misc=%25257B%252522request%25255Fid%252522%25253A%252522160708516219195265138671%252522%25252C%252522scm%252522%25253A%25252220140713.130102334.pc%25255Fall.%252522%25257D&request_id=160708516219195265138671&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_v2~rank_v29-10-105923431.nonecase&utm_term=uniapp%E7%9A%84%E5%9F%BA%E7%A1%80%E8%AF%AD%E6%B3%95%E6%98%AF%E4%BB%80%E4%B9%88。
#ifdef APP-PLUS
这里是app平台的代码
#endif
7、生命周期
在uni-app里面有三种什么周期:app生命周期、页面生命周期、组件生命周期。
8、uniapp中 nvue是什么?描述一下他的特点
uni-app App端内置了一个基于 weex 改进的原生渲染引擎,提供了原生渲染能力。
适用场景
nvue的组件和API写法与vue页面一致,其内置组件还比vue页面内置组件增加了更多,详见。
如果你熟悉 weex或react native 开发,那么 nvue 是你的更优选择,能切实提升你的开发效率,降低成本。
如果你是web前端,不熟悉原生排版,那么建议你仍然以使用vue页面为主,在App端某些vue页面表现不佳的场景下使用 nvue 作为强化补充。这些场景如下:
需要高性能的区域长列表或瀑布流滚动。webview的页面级长列表滚动时没有性能问题的(就是滚动条覆盖webview整体高度),但页面中某个区域做长列表滚动,则需要使用nvue的list、recycle-list、waterfall等组件(详见)。这些组件的性能要高于vue页面里的区域滚动组件scroll-view。
复杂高性能的自定义下拉刷新。uni-app的pages.json里可以配置原生下拉刷新,但引擎内置的下拉刷新样式只有雪花和circle圈2种样式。如果你需要自己做复杂的下拉刷新,推荐使用nvue的refresh组件。当然插件市场里也有很多vue下的自定义下拉刷新插件,只要是基于renderjs或wxs的,性能也可以商用,只是没有nvue的refresh组件更极致。
左右拖动的长列表。在webview里,通过swiper+scroll-view实现左右拖动的长列表,前端模拟下拉刷新,这套方案的性能不好。此时推荐使用nvue,比如新建uni-app项目时的新闻示例模板,就采用了nvue,切换很流畅。
实现区域滚动长列表+左右拖动列表+吸顶的复杂排版效果,效果可参考hello uni-app模板里的swiper-list。详见
如需要将软键盘右下角按钮文字改为“发送”,则需要使用nvue。比如聊天场景,除了软键盘右下角的按钮文字处理外,还涉及聊天记录区域长列表滚动,适合nvue来做。
解决前端控件无法覆盖原生控件的层级问题。当你使用map、video、live-pusher等原生组件时,会发现前端写的view等组件无法覆盖原生组件,层级问题处理比较麻烦,此时使用nvue更好。或者在vue页面上也可以覆盖一个subnvue(一种非全屏的nvue页面覆盖在webview上),以解决App上的原生控件层级问题。详见
如深度使用map组件,建议使用nvue。除了层级问题,App端nvue文件的map功能更完善,和小程序拉齐度更高,多端一致性更好。
如深度使用video,建议使用nvue。比如如下2个场景:video内嵌到swiper中,以实现抖音式视频滑动切换,例子见插件市场;nvue的视频全屏后,通过cover-view实现内容覆盖,比如增加文字标题、分享按钮。
直播推流:nvue下有live-pusher组件,和小程序对齐,功能更完善,也没有层级问题。
对App启动速度要求极致化。App端v3编译器模式下,如果首页使用nvue且在manifest里配置fast模式,那么App的启动速度可以控制在1秒左右。而使用vue页面的话,App的启动速度一般是3秒起,取决于你的代码性能和体积。
但注意,在某些场景下,nvue不如vue页面,如下:
canvas。nvue的canvas性能不高,尤其是Android App平台,所以这个组件干脆没有内置,而是需要单独引入。操作canvas动画,最高性能的方式是使用vue页面的renderjs技术,在hello uni-app里的canvas示例就是如此。
动态横竖屏。nvue页面的css不支持媒体查询,所以横竖屏动态切换、动态适配屏幕是很困难的。在HBuilderX的 uni-app 项目中,新建页面,弹出界面右上角可以选择是建立vue页面还是nvue页面,或者2个同时建。
不管是vue页面还是nvue页面,都需要在pages.json中注册。如果在HBuilderX中新建页面是会自动注册的,如果使用其他编辑器,则需要自行在pages.json里注册。
如果一个页面路由下同时有vue页面和nvue页面,即出现同名的vue和nvue文件。那么在App端,会仅使用nvue页面,同名的vue文件将不会被编译到App端。而在非App端,会优先使用vue页面。
如果不同名,只有nvue页面,则在非app端,只有uni-app编译模式的nvue文件才会编译。
详情见:https://uniapp.dcloud.io/nvue-outline?id=%e5%bf%ab%e9%80%9f%e4%b8%8a%e6%89%8b
如何进行存储数据,获取数据
存储:
uni.setStorage(OBJECT)
uni.setStorageSync(KEY,DATA)
获取:
uni.getStorage(OBJECT)
uni.getStorageSync(KEY)
uni.getStorageInfo(OBJECT)
uni.getStorageInfoSync()
详情见:https://uniapp.dcloud.io/api/storage/storage?id=getstorage
css像素单位使用什么最合适
移动端:rem vw vh
pc端:px rem响应式布局
微信小程序:rpx
都有哪些项目上出现的问题,以及如何解决的
https://blog.csdn.net/weixin_46648362/article/details/110670977