草庐IT

uni-App

人生不求满 2023-04-14 原文

uni-app概述

由dcloud 公司开发的 多端融合框架;1次开发 多端运行;技术架构:Vue语法+小程序的api

Hybrid混合开发

  • App端
HTML+
nvue(原生view)
native.js(js原生沟通的桥梁)
weex
内置ios/安卓的模块使用
  • H5端:h5专用api
  • 各种小程序(微信为主)

界面

 新建项目

 运行多端

H5

 

 小程序

  • 01 打开开发工具的服务端口
  • 02 HBuilderx配置 微信开发工具的地址
  • 03 配置微信小程序id
  • 04 运行到微信小程序

 App

  • 01 打开模拟器或者手机
  • 02 配置模拟器的端口
    • 夜神模拟器端口号:62001 

    • 海马模拟器端口号:26944

    • 逍遥模拟器端口号:21503

    • MuMu模拟器端口号:7555 

    • 天天模拟器端口号:6555

  • 03 运行到模拟器

 

 注意项:

hbuilder可能需要下载对应的插件;运行到安卓模拟器,有视图差别;运行可以需要一定的诗句

模板语法:

文本渲染:

        v-text=“表达式”

        表达式

简单的js运算:{{2+3}}
js方法调用
{{title.length}}
{{title.split("").reverse().join("")}}
3元运算符
<view>{{title.length>15?'长度很长':'字少事大'}}</view>

         v-html 富文本

v-ifv-else-if
v-elsev-show
通过三元运算符

 列表选项

  • 字符串,数字,列表,对象都可以遍历
  • <view v-for="(item,index) in list" :key="index">{{index+1}}  {{item}}</view>
  • 一定要保证兄弟元素间的key值是唯一

属性绑定

<button v-bind:disabled=“true”>
<button :disabled="true">

 表单绑定

默认
:value="单向绑定"
input
v-model=“双向绑定”
@change=“$event.detail.value”
事件,事件的值$event.detail.value

 事件

  • 事件绑定:  <view v-on:click="响应"
    • 简写绑定:<view @click="事件响应"
  • 事件行内处理:<view @click="num++"
  • 事件响应函数(函数在methods定义):<view @click="say">
  • 事件传参
    • 不写参数:@click="say"
      等同于: @click=“say()”
      等同于:@click=“say($event)”
    • $event 是一个固定写法 代表事件对象
      @click=“doit(str)”
      doit(str="你好"){
        uni.showModal({title:str})
      }

    事件对象:$event/e    

  • function say(e){}
  • target目标对象
  • dataSet 组件传参
    <view :data-title="title" @click="say">
    function say(e){
          e.target.dataset.title
    }

vue选项 

数据:data方法:methods
 
计算:computed
 
监听:watch
指令:directive过滤:filter

 uni-app的生命周期

        Vue的生命周期

  •  创建
    •      beforeCreate      
    • created   
      • 可以使用this,没有dom
      • 作用:
        1.  初始数据
        2.  注册监听事件
        3. 开启定时器
        4. ajax请求
  • 挂载
    • beforeMount
    • mounted
      • 可以操作dom(节点)
      • 作用:
        1.  操作dom
        2. ajax请求
  • 更新
    • beforeUpdate
    • updated
  • 卸载
    • beforeDestroy
      • 作用:
        1. 移除事件监听
        2. 移除停止定时器
    • destroyed

小程序的生命周期

  • onLoad加载
    • 能够获取页面的参数
    • 开启ajax,定时器,事件监听
    • 像vue的created
  • onShow显示
    • 播放媒体
  • onReady准备
    • 获取节点信息
    • 像vue的mounted
  • onHide 后台运行
    • 停止播放媒体
  • onUnload 卸载
    • 停止事件监听与定时器

小程序的全局方法

下拉刷新:onPullDownRefresh 
 
触底更新:onReachBottom()
 
右上角分享:onShareAppMessage
 
页面滚动:onPageScroll
 
分享到朋友圈:onShareTimeline
 

 app的全局方法

手机的返回键被点击:onBackPress
 
导航栏按钮被点击:onNavigationBarButtonTap
 

组件--表单

  • 按钮:button
    • type类型
      primary主要warn警告
      default 默认
    • size="mini"
    • disabled 是否可用
  • input标签里的设置
    value值
    v-model对表单双向绑定
    @change="$event.detail.value"
    placeholder 提示文本
  • picker
    • 模式:mode
      • time时间
      • date 日期
        • start="09:01" 
        • end="21:01"
      • region地区
    • value值
    • @change="$event.detail.value"
  • 滑块:slider
    value 值max 最大
    min 最小

路由 

路由组件

  • 导航:navigator
    • url 跳转页面的地址
    • 打开类型:open-type
      navigate跳转redirect重定向
      (当前页面不留历史记录)
      navigateBack返回relauch 重启
      switchTab 跳转底部栏
              

路由传参

  • 传递
    url:path?name=mumu&age=18
  • 接收
    onLoad(option){}
    option的值{name:"xiaxi",age:23}

路由api

跳转:uni.navigateTo({url})
重定向uni.redirectTo({url})
返回:uni.navigateBack()
底部栏切换:uni.switchTab()
重启:uni.reLaunch()

路由配置

         配置底部导航栏:tabBar

                在 pages.json 中,配置 tabBar
                注意:pages 的第一个 path 必须与 tabBar 的第一个 pagePath 相同否则不显示底部导航

"tabBar": {
        "color": "#7A7E83", // tab 上的文字默认颜色
        "selectedColor": "#3cc51f", // tab 上的文字选中时的颜色
        "borderStyle": "black", // tabbar 上边框的颜色,可选值 black/white
        "backgroundColor": "#ffffff",  // tab 的背景色
        "list": [{ // 最少2个、最多5个 tab
            "pagePath": "pages/index/index", // 页面路径,必须在 pages 中先定义
            "iconPath": "static/tabbar/home.png", // 图片路径,icon 大小限制为40kb,建议尺寸为 81px * 81px
            "selectedIconPath": "static/tabbar/home-active.png", // 选中时的图片路径
            "text": "首页" // tab 上按钮文字
        }, {
            "pagePath": "pages/my/my",
            "iconPath": "static/tabbar/my.png",
            "selectedIconPath": "static/tabbar/my-active.png",
            "text": "生命"
        }]
    }

获取当前页面:getApp

  • 01 在App.vue:定义globalData:{num:100}
  • 02 要使用的页面获取app
    var app  = getApp()
  • 03获取globalData的值
    onShow(){
    this.num = app.globalData.num
    }
  • 04 更新globalData值
    addNum(){
       app.globalData.num++;
       this.num = app.globalData.num
    }

获取页面栈

条件编译

        条件编译目的:不同的平台展示不同特性与功能

  • 模板条件编译
    • 格式<!-- #ifdef H5 -->内容<!-- #endif -->
    • 条件:
      APP--App端
      H5--网页
      MP--小程序或MP-WEIXIN--微信小程序
      <template>
      	<view>
      		<view>条件</view>
      		<!-- #ifdef H5 -->
      		<view>H5:下载APP获取优惠卷</view>
      		<!-- #endif -->
      		
      		<!-- #ifdef MP -->
      		<view>WX:小程序用户获取优惠卷</view>
      		<!-- #endif -->
      		
      		<!-- #ifdef APP -->
      		<view>app:优惠卷0.5元</view>
      		<!-- #endif -->
      		
      	</view>
      </template>
  • css条件编译
    <template>
    		<view class="active">我是一行文字</view>
    </template>
    <style>
    /* #ifdef APP-PLUS */
    .active{color: red}
    /* #endif */
    
    /* #ifdef H5 */
    .active{color: lightblue}
    /* #endif */
    
    /* #ifdef MP */
    .active{color: dodgerblue}
    /* #endif */
    </style>

  • js条件编译
    <template>
        <view>
    		<button size="mini" @click="say()">你好</button>
        </view>
    </template>
    <script>
    	export default {
    		data() {
    			return {
    				
    			}
    		},
    		methods: {
    			say(){
    				// #ifdef APP-PLUS
    				uni.showModal({
    					title:"你好App用户"
    				})
    				// #endif
    				// #ifdef MP
    				uni.showModal({
    					title:"你好微信用户"
    				})
    				// #endif
    				// #ifdef H5
    				uni.showModal({
    					title:"你好手机用户"
    				})
    				// #endif
    			}
    		}
    	}
    </script>

  • 跨平台配置条件配置在页面pages.json

                 在vue页面

<template>
    <view>
         <!-- #ifdef MP-WEIXIN || APP -->
		 <navigator url="/pages/condition/we">微信-App专有        </navigator>
		 <!-- #endif -->
     </view>
</template>

有关uni-App的更多相关文章

  1. ruby-on-rails - 每次我尝试部署时,我都会得到 - (gcloud.preview.app.deploy) 错误响应 : [4] DEADLINE_EXCEEDED - 2

    我是Google云的新手,我正在尝试对其进行首次部署。我的第一个部署是RubyonRails项目。我基本上是在关注thisguideinthegoogleclouddocumentation.唯一的区别是我使用的是我自己的项目,而不是他们提供的“helloworld”项目。这是我的app.yaml文件runtime:customvm:trueentrypoint:bundleexecrackup-p8080-Eproductionconfig.ruresources:cpu:0.5memory_gb:1.3disk_size_gb:10当我转到我的项目目录并运行gcloudprevie

  2. ruby-on-rails - 如何重命名或移动 Rails 的 README_FOR_APP - 2

    当我在我的Rails应用程序根目录中运行rakedoc:app时,API文档是使用/doc/README_FOR_APP作为主页生成的。我想向该文件添加.rdoc扩展名,以便它在GitHub上正确呈现。更好的是,我想将它移动到应用程序根目录(/README.rdoc)。有没有办法通过修改包含的rake/rdoctask任务在我的Rakefile中执行此操作?是否有某个地方可以查找可以修改的主页文件的名称?还是我必须编写一个新的Rake任务?额外的问题:Rails应用程序的两个单独文件/README和/doc/README_FOR_APP背后的逻辑是什么?为什么不只有一个?

  3. ruby - 使用 postgres.app 在 rvm 下要求 pg 时出错 - 2

    我正在使用Postgres.app在OSX(10.8.3)上。我已经修改了我的PATH,以便应用程序的bin文件夹位于所有其他文件夹之前。Rammy:~phrogz$whichpg_config/Applications/Postgres.app/Contents/MacOS/bin/pg_config我已经安装了rvm并且可以毫无错误地安装pggem,但是当我需要它时我得到一个错误:Rammy:~phrogz$gem-v1.8.25Rammy:~phrogz$geminstallpgFetching:pg-0.15.1.gem(100%)Buildingnativeextension

  4. ruby - 为 capybara 设置 app_host 的内容 - 2

    我的测试尝试访问网页并验证页面上是否存在某些元素。例如,它访问http://foo.com/homepage.html并检查Logo图像,然后访问http://bar.com/store/blah.html并检查页面上是否出现了某些文本。我的目标是访问经过Kerberos身份验证的网页。我发现Kerberos代码如下:主文件uri=URI.parse(Capybara.app_host)kerberos=Kerberos.new(uri.host)@kerberos_token=kerberos.encoded_tokenkerberos.rb文件classKerberosdefini

  5. ruby - 导轨 3 : Creating app with internal plugin system - 2

    我想在Rails中使用插件系统创建一个应用程序。潜在用户应该能够上传(或更好地从存储库安装)一个插件并安装它,使我的应用程序能够做更多的事情。这应该在没有FTP/SSH/对服务器的任何低级别访问的情况下完成。关于如何在Rails3中完成它,是否有任何好的gems或教程? 最佳答案 你看过http://edgeguides.rubyonrails.org/plugins.html了吗??它似乎不是100%兼容Rails3,但它可以帮助您入门。我看过的大多数插件文章都涉及Rails2。 关于

  6. ruby - 使用 Foreman 启动位于不同目录的 Rack App - 2

    我有一个成功运行多个进程的Procfile设置:#/Procfileredis:bundleexecredis-serversidekiq:bundleexecsidekiq-v-C./config.ymlforward:forward4567mock-api我需要再添加一个进程-一个位于我机器上不同目录中的Sinatra应用程序。如果我cd到该目录,我可以从终端启动它:$rackup-p4567我可以使用终端从不同的目录启动它:$sh-c'cd/Path/to/project/&&execrackup-p4567'但是我应该如何使用工头来做到这一点。我尝试添加以下内容,但它无声地失败

  7. ruby-on-rails - Rake 文档 :app fails after upgrading to Ruby 2. 1.1 和 Rails 4.1 - 2

    我使用命令rakedoc:app为我的Rails应用程序生成一些基本文档。它在过去一直运行良好。昨天我通过应用程序从Ruby1.9.3升级到2.1.1,从Rails3.2升级到4.1。该应用程序一切正常,所以几周后我第一次重新生成文档,但失败了。我运行上面的命令并收到以下错误消息:rakeaborted!Don'tknowhowtobuildtask'README.rdoc'/home/vagrant/.rvm/gems/ruby-2.1.1/bin/ruby_executable_hooks:15:in`eval'/home/vagrant/.rvm/gems/ruby-2.1.1/

  8. ruby-on-rails - rails : Omniauth - "The parameter app_id is required" - 2

    我正在按照这个railscast教程在我的rails项目上为facebook身份验证设置omniauth:http://railscasts.com/episodes/360-facebook-authentication?autoplay=true.我只用了4分钟,到目前为止我所做的就是捆绑gemomniauth-facebook并添加,omniauth.rbOmniAuth.config.logger=Rails.loggerRails.application.config.middleware.useOmniAuth::Builderdoprovider:facebook,ENV

  9. ruby-on-rails - 将 Rails/ClearDB App 推送到 Heroku 错误 'Can' t 连接到 '127.0.0.1' 上的 MySQL 服务器 - 2

    每次我跑:gitpushherokumaster我收到以下错误:Running:rakeassets:precompilerakeaborted!Can'tconnecttoMySQLserveron'127.0.0.1'我在运行rails-vRails3.2.11和ruby-vruby1.9.3p194(2012-04-20revision35410)[x86_64-darwin12.2.0]我已经通过HerokuCLI安装了ClearDB,它似乎工作正常,但我无法找出这个错误。这是我用于生产的yml:production:adapter:mysql2encoding:utf8hos

  10. ruby - 如何从 Terminal.app 运行一段 ruby​​ 代码? - 2

    我专门将OSXTerminal.app用于命令行,但这个问题也可能适用于其他命令行工具。假设我想从命令行运行这段ruby​​代码:Cats.eachdo|cat|cat.name='Mommy'cat.kittenseachdo|kitten|kitten.color="Brown"endend现在,如果我复制/粘贴它,它就会被分解并且不会执行。 最佳答案 ruby-e"Cats.eachdo|cat|cat.name='Mommy'cat.kittenseachdo|kitten|kitten.color='Brown'enden

随机推荐