uni-app中nvue (weex) 注意事项

摘要:
uni app的nvue是Weex的一系列功能。uni应用程序集成了Weex的SDK,实现了应用程序的原生渲染功能。图像设置边界半径在nvue中,您无法设置图像的边界半径。要将矩形图案转换为圆形,需要在图像上包装一个div。代码如下:设置真实像素。在Weex规范中,只有一个长度单位:px。总屏幕宽度为750px。设置长度后,Weex引擎将根据手机屏幕的宽度动态计算实际长度,类似于uni应用程序的upx。

前言

uni-app 是 DCloud 出品的新一代跨端框架,可以说是目前跨端数最多的框架之一了,目前支持发布到:App(Android/iOS)、H5、小程序(微信小程序/支付宝小程序/百度小程序/字节跳动小程序),目前市面上类似的框架还有:Taro(京东出品)、Megalo(网易出品)。

uni-app 的 nvue 说白了就是 weex 的那一套东西,uni-app 集成了 weex 的 SDK,也就实现了 App 端的原生渲染能力。

weex 支持的东西,在 nvue 里大多都是支持的,所以这里就不详细讲述 weex 的相关组件和 api 调用,只讲述一些在实际开发过程中遇到的一些小问题。

Hello World

开始创建第一个 nvue 页面。

目录结构:

uni-app中nvue (weex) 注意事项第1张

index.nvue 代码如下:

<template>
    <div>
        <text>{{text}}</text>
    </div>
</template>
<script>
    export default {
        data() {
            return {
                text: 'Hello World'
            }
        }
    }
</script>

如此真机运行可能遇到如下错误:

uni-app中nvue (weex) 注意事项第2张

造成这个问题的原因是 uni-app 项目里必须有一个 vue 的页面,新建一个 vue 页面然后重新运行就不会有问题了。

uni-app中nvue (weex) 注意事项第3张

image 设置 border-radius

在 nvue 里面不能给 image 设置 border-radius,想要将矩形图案变为圆形需要在 image 外面包一层 div,代码如下:

<div style=" 400px;height: 400px;border-radius: 400px;overflow: hidden;">
    <image style=" 400px;height: 400px;" src="https://img-cdn-qiniu.dcloud.net.cn/uniapp/images/uni@2x.png"></image>
</div>

设置真实像素

在 weex 的规范里只有一个长度单位即:px,屏幕总宽度为 750px,设置长度后,weex 引擎会根据手机屏幕的宽度动态计算出实际长度,类似于 uni-app 的 upx。

但是在实际开发过程中可能不想要这样动态的长度单位,此时可以使用 weex 1.x版本里面一个长度单位:wx。这个单位就是实际像素单位,虽然 weex 文档没有提及,但目前任然是可用的,当然随着 weex 的更新,wx 也可能会不再支持。

引入外部的 css

在 App.vue 里写的公用的样式在 nvue 里是不生效,多个 nvue 想要使用公用的样式,需要引入外部的 css。

由于 weex 的限制,不能在 style 节点下使用 @import "xxx.css" 这样的方式引入外部 css,需要使用如下方式引入 css:

<style src="@/common/test.css"></style>
<style>
   .test {
        color: #E96900;
   }
</style>

需要注意的是在 <style src="http://t.zoukankan.com/@/common/test.css"></style> 节点里写样式是不生效的。

使用 ttf 字体文件

在nvue或者weex中是不能直接在css中 通过 @font-face 这样的方式引入字体文件的,需要在js中使用 dom 模块引入字体文件,可参考 weex文档

const domModule = weex.requireModule('dom');
domModule.addRule('fontFace', {
    'fontFamily': "iconfont2",
    'src': "url('http://at.alicdn.com/t/font_1469606063_76593.ttf')"
});

vue 打开 nvue 时传递参数

由于 vue 打开 nvue 时不能在 url 后携带参数,只能使用 storage 的方式进行参数传递。

在 vue 页面打开 nvue

uni.setStorageSync('test', 'hello');
uni.navigateTo({
    url:"/pages/nvue/nvue"
})

在 nvue 页面获得参数,在 created 里调用 uni-app 的 api 时需要延时一段时间才能调用成功(最新版 uni-app 框架已经修复此问题,不用延时也可以调用成功)。

<script>
    export default {
        created() {
            console.log("nvue created!");
            setTimeout(() => {
                uni.getStorage({
                    key:'test',
                    success: (res) => {
                        console.log("获得上个页面传递的数据" + res.data)
                    }
                })
            },200)
        }
    }
</script>

仿微信朋友圈效果

在开发中,有个页面需要做到如微信朋友圈那样效果:整体列表为从上到下排列,每个列表为左右两列,左边为用户头像,右边消息内容。

在开发的时候,首先想到的是父元素使用 flex-direction: row; 让头像和内容,分别在左右展示。但是出了问题,内容区域的高度不能根据文字的长度而撑开;如果父元素使用上下排列,内容区域的高度就可以被文字所撑开。

出现问题的代码如下:

<template>
    <div style="">
        <div class="items">
            <div class="headImg"></div>
            <div class="rgtBox">
                <text>上下排列时候可以撑开内容,上下排列时候可以撑开内容,上下排列时候可以撑开内容,上下排列时候可以撑开内容,上下排列时候可以撑开内容,上下排列时候可以撑开内容,上下排列时候可以撑开内容,上下排列时候可以撑开内容,上下排列时候可以撑开内容。</text>
            </div>
        </div>
        <div class="items" style="flex-direction: row;">
            <div class="headImg"></div>
            <div class="rgtBox" style="flex: 1;">
                <text>左右排列时候不可以撑开内容,左右排列时候不可以撑开内容,左右排列时候不可以撑开内容,左右排列时候不可以撑开内容,左右排列时候不可以撑开内容,左右排列时候不可以撑开内容,左右排列时候不可以撑开内容,左右排列时候不可以撑开内容,左右排列时候不可以撑开内容</text>
            </div>
        </div>
    </div>
</template>
<script>
    export default {
    }
</script>
<style>
    .items {
        background-color: #fff;
        margin-bottom: 50px;
    }
    .headImg {
         100px;
        height: 100px;
        background-color: #555;
    }
    .rgtBox {
        background-color: #fff;
    }
</style>

出现这个问题应该是 weex 的 bug,左边元素设置高度后,右边若不设置高度,其最大高度为左边元素的高度。解决办法就是将头像和内容均上下排列,然后设置内容区域的 margin-left、margin-top 和 min-height 就能达到类似的效果。

代码如下:

<template>
    <div style="flex-direction: column;">
        <div class="item">
            <div class="headImg"></div>
            <div class="rgtBox">
                <text>一段短文本,一段短文本</text>
            </div>
        </div>
        <div class="item">
            <div class="headImg"></div>
            <div class="rgtBox">
                <text>这里是一段长文本,这里是一段长文本,这里是一段长文本,这里是一段长文本,这里是一段长文本,这里是一段长文本,这里是一段长文本,这里是一段长文本,这里是一段长文本,这里是一段长文本,这里是一段长文本,这里是一段长文本,这里是一段长文本,这里是一段长文本,这里是一段长文本,这里是一段长文本,这里是一段长文本,这里是一段长文本,这里是一段长文本,这里是一段长文本,这里是一段长文本,这里是一段长文本,这里是一段长文本,这里是一段长文本,这里是一段长文本,这里是一段长文本</text>
            </div>
        </div>
    </div>
</template>

<script>
    export default {}
</script>
<style>
    .item {
        background-color: #fff;
        margin-bottom: 50px;
    }
    .headImg {
         100px;
        height: 100px;
        background-color: #555;
    }
    .rgtBox {
         600px;
        min-height: 100px;
        margin-left: 130px;
        margin-top: -100px; 
        background-color: #fff;
    }
</style>

免责声明:文章转载自《uni-app中nvue (weex) 注意事项》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇小程序获取权限的方式(示例)Windows下MongoDB常用命令下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

微信分享回调

我在做我们的项目中用到了判断用户是否将文章或者内容通过微信分享出去了,确定用户通过微信分享出去后给用户增加相应的积分。 15年微信修改了策略可以直接调用对应的接口 引入微信接口文件 http://res.wx.qq.com/open/js/jweixin-1.0.0.js 开始分享代码 WeixinApi.ready(function(Api) {    ...

国内外知名IT科技博客(强烈推荐)

国内 1、36氪(www.36kr.com): 目前国内做的最风生水起的科技博客,以介绍国内外互联网创业新闻为主的博客网站,自己建立有36Tree互联网创业融投资社区。36氪的名字源于元素周期 表的第36号元素“氪”,化学符号为Kr。传说中的氪星是超人的故乡。除了为创业者免费提供新闻报道,他们主办的“36氪开放日”为早期互联网创业公司初创产品发布,提供了非...

多屏适应响应式布局方案,响应式、自适应布局区别 完整的思维导图

多屏适应响应式布局方案,响应式、自适应布局区别 响应式布局 响应式布局是Ethan Marcotte在2010年5月份提出的一个概念,一个网站能够兼容多个终端,而不是为每个终端做一个特定的版本,不需要分配子域名。可以为不同终端的用户提供更加舒适的界面和更好的用户体验,而且随着目前大屏幕移动设备的普及,用大势所趋来形容也不为过。 响应式布局能够兼容不同屏幕...

项目选题报告(团队)

项目名称——“听说” 一、团队分工 - 周龙荣 2015级计算机5班031502543 负责方向:登录界面设计+界面交互+需求分析 掌握C语言,C++等编程语言,学习过php等编程语言,参加福州大学服务外包与软件设计大赛并获校二等奖。曾开发过数据库系统,有网页界面设计方面经验,有较强的团队意识,良好的组织协调能力。 李家鹏 2015级计算机6班0315...

Taro开发微信小程序的初体验

了解Taro 听说Taro是从几个星期前开始的,在一次饭桌上,一个小伙伴说:“Hey, 你听说了Taro么,听说只需要写一套程序就可以生成H5,小程序以及RN的代码模板,并且类似于React的语法。”“哦?还有这么好的事,赶紧研究一下。” Taro初体验 去官网,Github了解了一下,Taro是由京东·凹凸实验室团队开发的,在掘金上看到他们的发稿,大致归...

小程序获取用户登录及手机号登录

小程序登录除了常见的短信登录、密码登录,还一个最重要的就是微信授权登录了(毕竟是基于微信的,要给人家面子吗:0,手动滑稽),写这篇随笔的原因还是好久没更了,今天先随便放一个压压档。话不多说,直奔主题。 小程序的微信授权登录中,可以直接写入微信定义好的button组件掉起微信授权功能。 需要注意的就是定义open-type了,其对应的可选属性还有很多种,具体...