田福 發表於 2020-3-25 17:58:00

uni-app 开发 app

<p>1、关于uni-app 框架配置:(下面这个是创建uni-app项目的基本目录结构)</p>
<p><img src="https://img2020.cnblogs.com/i-beta/1772502/202003/1772502-20200325150228167-943693875.png"></p>
<div class="cnblogs_code">
<pre>pages.json 文件用来对uni-app 进行全局配置,决定页面文件路径,窗口样式,原生导航栏,底部的tabbar 等等。(类似于小程序 中的 app.sjon )<br>example:(下面这个是包含了所有配置选项的 pages.json )<br>{<br>"pages":[{<br>   "path":"pages/index/index",<br>   "style":{// 用于设置每个页面的状态栏,导航条,标题,窗口背景色等<br>      "navigationBarTitleText":"入口文件" ,//导航栏标题文字内容<br>      "enablePullDownRefresh":true, // 开启下拉刷新<br>      }<br>   },{<br>   "path":"pages/home/home",<br>   "style":{<br>      "navigationBarTitleText":"首页"<br>      }<br>   },{<br>   "path":"pages/classify/classify",<br>   "style":{<br>      "navigationBarTitleText":"分类"<br>   }<br>   }],<br>   "globalStyle":{   //用于设置应用的状态栏,导航条,标题,窗口背景色等<br>   "navigationBarTextStyle":"black",//导航栏标题颜色及状态栏前景颜色,仅支持black/white <br>   "navigationBarTitleText":"demo",   // 导航栏标题文字内容<br>   "navigationBarBackgroundColor":"#f7f7f7", // 导航栏背景颜色默认是 #f7f7f7<br>   "backgroundColor":"#ffffff", // 窗口的背景颜色<br>   "usingComponents":{} //引用小程序组件<br>   },<br>   "tabBar":{<br>   "color":"#ffffff",// tab 上面的文字默认颜色<br>   "selectedColor":"#00cf89",//tab 上文字选中时的颜色<br>   "backgroundColor":"#ffffff",//tab 的背景色<br>   "borderStyle":"black",// tabbar 上边框的颜色,可选值 black ,white<br>   "height":"50px",// tabbar 默认高度<br>   "fontSize":"10px",// 文字默认大小<br>   "iconWidth":"24px",//图标默认宽度 等比例缩放<br>   "spacing":"3px", // 图标和文字的间距<br>   "list":[{   // tab 列表<br>         "pagePath":"pages/home/home",<br>         "iconPath":"static/image/img.png",<br>         "selectedIconPath":"static/image/img_on.png",<br>         "text":"home"<br>   },{<br>         "pagePath":"pages/classify/classify",<br>         "iconPath":"static/image/ify.png",<br>         "selectedIconPath":"static/image/ify_on.png",<br>         "text":"classify"<br>   }],<br>   "midButton":{// 中间按钮 ,仅在 list 项为偶数时有效<br>         "width":"80px",<br>         "height":"50px",<br>         "text":"text",<br>         "iconPath:"static/image/btn.png",<br>         "iconWidth":"24px",<br>         "backgroundImage":"static/image/btn_on.png"<br>   }<br>   }<br>}<br><br>////////////////////////////////////////////////////<br><br>mainfest.json文件是应用的配置的文件,用于指定应用的名称,图标,权限等。<br>name://应用名称<br>appid://应用标识,新建uni-app项目时,dcloud 云端分配。<br>description://应用描述<br>versionName://版本名称<br>versionCode://版本号<br>transformPX://是否转换项目的px,为true,将px转换为rpx.<br><br>////////////////////////////////////////////////////<br><br>package.json 文件增加 uni-app 扩展点,可实现自定义条件编译平台。<br>配置用法:<br>   { <br>      "uni-app":{<br>         "scripts":{<br>            "custom-platform":{<br>                  "title":"自定义扩展名称",<br>                  "BROWSER":"",//运行到目标浏览器<br>                  "env":{<br>                      "UNI_PLATFROM":"",//基准平台<br>                  },<br>                  "define":{<br>                      "CUSTOM-CONST":true //自定义条件编译常量<br>                  }<br>            }<br>          }<br>      }<br>   }<br>///////////////////////////////////////////////////<br><br>注意vue.config.js 这个文件,如果打包的话,是需要这个的哦,一般用于配置 webpack 等编译选项<br>    module.exports = function(){<br>      publicPath:'/'<br>    }<br><br>/////////////////////////////////////////////////<br><br>uni.scss 文件的用途是 为了方便 整体控制应用的风格。<br>   需要在hbuilderx 里面安装 scss 插件;使用时还要在 style节点 加上 lang="scss"<br><br>////////////////////////////////////////////////<br><br>App.vue 是 uni-app的主组件,所有页面都是在 App.vue 下进行切换的,是页面入口文件。<br>但他本身不是页面,不能编写视图元素。<br>文件作用包括:调用 应用生命周期函数,配置全局样式,配置全局的存储 globalData.<br>应用生命周期仅在 App.vue 中监听,在页面监听无效。<br><br>应用生命周期函数:<br>   onLaunch : 当uni-app初始化完成时触发 (全局只触发一次)<br>   onShow : 当 uni-app启动,或从后台进入前台显示<br>   onHide : 当 uni-app从前台进入后台<br>   onError : 当 uni-app 报错时触发<br>   <br> 在 App.vue中定义 globalData 配置:<br>   export default {<br>         globalData:{<br>            text:'text'<br>         }<br>   } <br>   js 中操作 globalData 的方式如下 : getApp().globalData.text = 'test';<br>   在应用 onLaunch 时,getApp 对象还未获取,暂时可以使用 this.$scope.globalData 获取globalData.<br><br>全局样式,在 App.vue 中,引用共同的css文件方式:@import '../../common/common.css';<br><br>//////////////////////////////////////////////<br><br>main.js 是uni-app 的入口文件,主要作用是初始化 vue 实例,定义全局组件,使用需要的插件如vuex。<br>首先引入了 vue库和App.vue ,创建了一个vue实例,并且挂载vue实例。<br>import Vue from 'vue';<br>import App from './App';<br>import pageHead from './components/page-head.vue';//全局引用page-head组件<br>Vue.config.productionTip = false;<br>Vue.component('page-head',pageHead);//全局注册 page-head 组件,每个页面将可以直接使用该组件<br>App.mpType = 'app';<br>const app = new Vue({<br>   ...App<br>})<br>app.$mount();//挂载Vue 实例<br><br><br>//////////////////////////////////////////////////<br>提示:<br>在 hbuilderx 中 ,输入 clog 可以直接输出 console.log();<br>输入 clogv 可直接输出console.log(":"+ );</pre>
</div>
<p>&nbsp;</p>
<p>2、页面生命周期</p>
<div class="cnblogs_code">
<pre>onLoad(){}监听页面加载,其参数为上个页面传递的数据,参数类型object,用于页面传参。<br>onShow(){}监听页面显示。页面每次出现在屏幕上都触发,包括从下级页面点返回露出当前页面。<br>onReady(){} 监听页面初次渲染完成,注意如果渲染速度快,会在页面进入动画完成前触发。<br>onHide(){}监听页面隐藏<br>onUnload(){} 监听页面卸载<br>onResize(){} 监听窗口尺寸变化 (app,微信小程序)<br>onPullDownRefresh(){} 监听用户下拉动作,一般用于下拉刷新<br>onReachBottom(){} 页面滚动到底部的事件不是scroll-view,常用语下拉下一页数据<br>onBackPress(){}监听页面返回,返回 event = {from:backbutton,navigateBack},backbutton 表示来源是左上角返回按钮,navigateBack表示来源是 uni.navigateBack <br><br></pre>
</div>
<p>3、组件生命周期</p>
<div class="cnblogs_code">
<pre>//uni-app 组件支持的生命周期与 vue的相同。<br>beforeCreate(){}在实例初始化之后被调用<br>created(){}在实例创建完成后被立即调用<br>beforeMount(){}在挂载开始之前被调用<br>mounted(){} 挂载到实例上去之后调用<br>beforeUpdate(){} 数据更新时调用<br>updated(){} 由于数据更改导致的虚拟dom重新渲染和打补丁,在这之后会调用该钩子<br>beforeDestroy(){} 实例销毁之前调用<br>destroyed(){} vue 实例销毁后调用,调用后,vue实例指示的所有东西都会解绑定,所有的事件监听器都会被移除,所有的子实例也会被销毁。</pre>
</div>
<p>4、页面</p>
<div class="cnblogs_code">
<pre>getApp() 函数用于获取当前应用实例,一般用于获取 globalData。<br>实例:<br>    const app = getApp();<br>    console.log(app.globalData);<br><br>getCurrentPages()函数用于获取当前页面栈的实例,以数组的形式按栈的顺序给出,第一个元素为首页,最后一个元素为当前页面。<br>getCurrentPages() 可以得到所有页面对象,然后根据数组,可以取指定的页面 webview 对象。<br>var pages = getCurrentPages();<br>var page = pages;<br>var currentWebview = page.$getAppWebview();<br>consol.elog(currentWebview.id);//获取当前 webview 的id值。<br><br>注意:<br>    navigateTo,redirectTo 只能打开非tabBar 页面。<br>    switchTab 只能打开 tabBar 页面。<br>    reLaunch 可以打开任意页面。</pre>
</div>
<p>5、页面通讯</p>
<div class="cnblogs_code">
<pre>uni.$emit(eventName,object);//事件名,触发事件携带的附加参数   触发全局的自定事件。附加参数都会传给监听器回调。<br>   uni.$emit('update',{msg:'页面更新'})<br><br>uni.$on(eventName,callback); //监听全局的自定义事件,事件可以由 uni.$emit触发,回调函数会接收所有传入事件触发函数的额外参数<br>   uni.$on('update',function(data){<br>       console.log('监听到事件来自 update ,携带参数为 ' +data.msg)<br>   })<br><br>uni.$once(eventName,callback);// 监听全局的自定义事件。事件可以由 uni.$emit触发,但是只触发一次,在第一次触发之后移除监听器。<br>   uni.$once('update',function(data){<br>       console.log('监听 update 事件'+data.msg)<br>   })<br><br>uni.$off() 移除全局自定义事件监听器<br>   uni.$off('update',function(data){<br>       <br>   })<br><br>注意: 使用时,要及时销毁事件监听,比如,页面 onLoad 里面uni.$on 注册监听,onUnload 里面 uni.$off 移除。 或一次性的事件,直接使用 uni.$once 监听 。</pre>
</div>
<p>6、网络请求</p>
<div class="cnblogs_code">
<pre>//对于 get方法,会将数据转换为 query string 。 例如{ name:'name',age:18} 转换后的结果是 name=name&amp;age=18<br>// 对于 post方法 且header['content-type'] 为 application/json 的数据,会进行 JSON 序列化。<br>// 对于 post 方法 且 header['content-type'] 为 application/x-www-form-urlencoded 的数据,会将数据转换为 query string 。<br>example:<br>   uni.request({<br>      url:'',//接口地址,<br>      data:{   // 参数<br>         name:'name'<br>      },<br>      method:'GET',<br>      header:{<br>         'content-type':'applicaiton/json'//自定义请求头信息<br>      },<br>      success:(res)=&gt;{<br>         console.log(res,'success')<br>      },<br>      fail:(err)=&gt;{<br>         console.log(err,'fail')<br>      }<br>   })</pre>
</div>
<p>7、上传,下载文件,图片类</p>
<div class="cnblogs_code">
<pre>//将本地资源上传到开发者服务器,客户端发起一个post请求,其中 content-type 为 multipart/form-data 。<br><br>uni.chooseImage({<br>    count:1,<br>    sizeType:['original','compressed'],<br>    sourceType:['album','camera'],<br>    success:(chooseImageRes)=&gt;{<br>      const tempFilePaths = chooseImageRes.tempFilePaths;<br>      uni.uploadFile({<br>            url:'',//服务器地址<br>            filePath:tempFilePaths,<br>            name:'file',<br>            formData:{<br>               'user':'test'<br>            },<br>            success:(uploadFileRes)=&gt;{<br>                console.log(uploadFileRes)<br>            }<br>      })<br>    }<br>})<br><br>//下载文件资源到本地,客户端发起get请求,返回文件的本地临时路径<br>uni.downloadFile({<br>    url:'',//接口地址<br>    success:(res)=&gt;{<br>       console.log(res)<br>    }<br>})</pre>
</div>
<p>还有很多 api 要到官网看哦。</p>
<p>最近在用uni-app 开发,说一下自己的创建项目流程,以及打了一个测试demo版瞅瞅的过程</p>
<p>编辑器还是 选用的 HBuilderX 哒,左上角有个文件,点击文件,选择新建文件,再选择项目,会弹出下面这个框,然后选择uni-app哦。</p>
<p><img src="https://img2020.cnblogs.com/i-beta/1772502/202003/1772502-20200325174533290-957605265.png"></p>
<p>填写项目名称,点击创建,至此,这个项目就创建成功了。</p>
<p>然后再该项目中新建一个 vue.config.json 文件,内容照1里面配置即可。</p>
<p>在HBuilderX 标题栏会看到一个 发行 ,点击 会出现一个 原生 App-打包,选择后,会弹出下面这个框,选择红框标记处,最后点击打包按钮即可。</p>
<p><img src="https://img2020.cnblogs.com/i-beta/1772502/202003/1772502-20200325174822687-1807164260.png"></p>
<p>&nbsp;</p>
<p>注意: 打包成功后,会有一个地址下载该应用,但是只能下载5次哦。</p>
<p>&nbsp;</p>
<p>具体参考官网文档 :&nbsp;https://uniapp.dcloud.io/collocation/pages</p>

</div>
<div id="MySignature" role="contentinfo">
    如果快乐太难,那祝你平安。<br><br>
来源:https://www.cnblogs.com/sunnyeve/p/12567778.html
頁: [1]
查看完整版本: uni-app 开发 app