weex入门篇
weex入门篇
Weex 致力于使开发者能基于当代先进的 Web 开发技术,使用同一套代码来构建 Android、iOS 和 Web 应用。
weex SDK 集成了vueJS,Rax,不需要额外引入。
一)环境的搭建
1)搭建android环境:首先安装搭建好AndroidStudio,参照react-native 官网环境搭建(比较清楚),适用于weex。
2)安装weex环境
$ npm install -g weex-toolkit
$ weex -v //查看当前weex版本
3)初始化一个项目
$ weex create 项目名字
4)我们先通过 npm install
安装项目依赖。之后运行根目录下的 npm run dev & npm run serve
开启 watch 模式和静态服务器。
然后我们打开浏览器,进入 http://localhost:8080/index.html
即可看到 weex h5 页面。
二)真机调试
首先安装一个adb,下载地址 http://adbshell.com/downloads , 正确安装adb,https://jingyan.baidu.com/article/22fe7cedf67e353002617f25.html ,
通过usb链接手机,电脑,执行命令 weex run android
三)开发注意
1)关于全局对象:
在开发h5项目的时候会经常性的使用到document,history,location,navigator,window,screen等一些全局变量,但是在开发三端兼容的项目的时候不能使用。
window、screen -----> WXEnvironment或者weex.config.env.platform
document -----> weex.requireModule("dom")
2)关于导航:
weex集成了vueRouter,但是使用vueRouter只是单页面,在浏览器中的vue应用,通过浏览器的“前进”,”后退“仍然会处于同一个页签,但是在原生应用中的”前进“,”后退“则会跳出这个页签到其他页面。因此建议使用weex的提供的navigator进行页面跳转。
3)关于css样式:
weex适配默认是iphone6 (750)的物理像素宽的等比缩放方式,无视屏幕分辨率和尺寸,采用flex流式布局。
weex 不支持样式嵌套多层查询,例如 .outer-wrapper .inner-item 这种多类嵌套查询。
不支持样式继承,例如color,fontSize。
image元素要给出width,height不然无法显示图片。
不识别样式属性的简写 margin: 0 0 10px 10px,要写成margin-top:0;margin-right:0margin-bottom:10px; margin-left:10px; color: #888 -> #888888; blue -> #0000FF
4)静态资源图片的加载web,android,ios三个平台的加载方式有不同,要做代码处理,
android需要将图片资源放置在 \platforms\android\app\src\main\res\ drawable-**文件中,
ios: platforms\ios\images
下面给出一段拷贝图片的具体实现:
copyFile.js
// @fun 针对于weex框架image静态资源加载web,ios,android的加载方式不同做的特殊处理
'use strict'
const mkdirp = require('mkdirp')
const filecopy = require('filecopy')
// google play上上架
/**
*google play会根据不同的手机density来打不同的apk包(举个栗子,如果是hdpi的机器,下载下来的就只有hdpi的资源)
*如果是在国内的市场话。建议只放一套(h或者xhpdi),因为国内市场是没有上面那种机制的,放多套资源会导致安装包变得很大。
*此外: Android在没有找到相应dpi的图片时,会用其他density的图片进行缩放处理。
*/ // 获取命令行参数
let paltformDefine = process.argv.slice(2)[0]
let filePath = 'src/assets/icons/*.png'
let androidIconPlatform = ['drawable-hdpi', 'drawable-mdpi', 'drawable-xhdpi', 'drawable-xxhdpi'] if (paltformDefine === 'android') {
let androidPath = 'platforms/android/app/src/main/res/'
mkdirFile(androidPath).then(res => {
androidIconPlatform.forEach((item, index) => {
copyIcon(`${androidPath}` + `${item}`)
})
}).catch(err => {
return err
})
} else if (paltformDefine === 'ios') {
let iosPath = 'platforms/ios/images/'
mkdirFile(iosPath).then(res => {
copyIcon(iosPath)
}).catch(err => {
return err
})
} function copyIcon (fileDestPath) {
filecopy(filePath, fileDestPath, {
mkdirp: true
}).then(() => {
return ''
}).catch(() => {
console.log('file copy fail')
})
} function mkdirFile (fileName) {
return new Promise((resolve, reject) => {
mkdirp(fileName, function (err) {
if (err) {
return reject(err)
}
return resolve(true)
})
})
}
getImageFile:
module.exports = {
getImageFile: function (imageName) {
if (!weex || !weex.config || !weex.config.env) {
return
}
let _dotPoint = (imageName + '').lastIndexOf('.')
let _pureFileName = (imageName + '').slice(0, _dotPoint)
// let _imageFormat = (imageName + '').slice(_dotPoint)
// 平台信息
let _platform = weex.config.env.platform
if (_platform === 'android') {
let _filePrefix = 'local:///'
return _filePrefix + _pureFileName
}
if (_platform === 'iOS') {
let _filePrefix = 'local://'
return _filePrefix + _pureFileName
}
if (_platform === 'Web') {
let _filePrefix = '../../src/assets/icons/'
return _filePrefix + imageName
}
}
}
npm command
"copyFile:android": "node src/utils/copyFile.js android",
"copyFile:ios": "node src/utils/copyFile.js ios",
"copy": "npm run copyFile:android && npm run copyFile:ios"
执行 npm run copy即可,完成图片资源的复制
具体在页面上使用
<image class="player-icon" :src="_getImageFile('player.png')"/> // 获取image 路径
_getImageFile (ImageName) {
return commonFun.getImageFile(ImageName)
},
weex入门篇的更多相关文章
- Weex入门篇——Mac 安装Weex
相关文档:http://blog.csdn.net/jasonblog/article/details/51863173 前言 相比较于React Native的“Learn once, write ...
- Membership三步曲之入门篇 - Membership基础示例
Membership 三步曲之入门篇 - Membership基础示例 Membership三步曲之入门篇 - Membership基础示例 Membership三步曲之进阶篇 - 深入剖析Pro ...
- spring boot(一):入门篇
构建微服务:Spring boot 入门篇 什么是spring boot Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框 ...
- 1. web前端开发分享-css,js入门篇
关注前端这么多年,没有大的成就,就入门期间积累了不少技巧与心得,跟大家分享一下,不一定都适合每个人,毕竟人与人的教育背景与成长环境心理活动都有差别,但就别人的心得再结合自己的特点,然后探索适合自己的学 ...
- 一个App完成入门篇(七)- 完成发现页面
第七章是入门篇的倒数第二篇文章了,明天整个APP将进入收官. 本节教程主要要教会大家使用二维码扫描和用do_WebView组件加在html页面. 导入项目 do_WebView组件 扫描功能 自定义事 ...
- [原创]Linq to xml增删改查Linq 入门篇:分分钟带你遨游Linq to xml的世界
本文原始作者博客 http://www.cnblogs.com/toutou Linq 入门篇(一):分分钟带你遨游linq to xml的世界 本文原创来自博客园 请叫我头头哥的博客, 请尊重版权, ...
- 转:OSGi 入门篇:模块层
OSGi 入门篇:模块层 1 什么是模块化 模块层是OSGi框架中最基础的一部分,其中Java的模块化特性在这一层得到了很好的实现.但是这种实现与Java本身现有的一些模块化特性又有明显的不同. 本文 ...
- 转:OSGi 入门篇:生命周期层
OSGi 入门篇:生命周期层 前言 生命周期层在OSGi框架中属于模块层上面的一层,它的运作是建立在模块层的功能之上的.生命周期层一个主要的功能就是让你能够从外部管理应用或者建立能够自我管理的应用(或 ...
- 【three.js详解之一】入门篇
[three.js详解之一]入门篇 开场白 webGL可以让我们在canvas上实现3D效果.而three.js是一款webGL框架,由于其易用性被广泛应用.如果你要学习webGL,抛弃那些复杂的 ...
随机推荐
- mongodb的分片(2)
在上一片博客,详细说明了mongodb的分片搭建的详细过程:分片搭建 在这里会说一些分片的维护与操作! 在集群搭建完,我们使用了sh.status()查看分片之后的数据,如下: #连接的是mongos ...
- Linux学习笔记之Linux启动级别
对于绝大多数Linux程序员来说,进入Linux系统后一般看到的是黑乎乎的界面(开发模式),因为系统如果启动选择开发模式,会减少启动时间,优化内存等.但是通常我们刚安装完Linux系统,然后进去以后是 ...
- redis未授权访问漏洞总结
Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API. 漏洞介绍: Redis 默认情况下,会绑定在 0.0.0.0 ...
- jsoop_封装
<script> //java.utils.ArrayList() //包(命名空间) /* var java = {}; java.utils = {}; java.utils.Arra ...
- 使用 if 语句
与很多编程语言一样,if 表达式用来处理逻辑条件.在 R 中,逻辑条件通常表达为某个表达式返回的单值逻辑向量.例如,我们可以写一个简单的函数 check_positive,如果输入一个正数则返回 1, ...
- mac上将代码上传到github以及github对100M以上文件限制上传的处理(lfs)。
前言 有时我们会写一些小程序来学习新的知识,但是完事之后过一段时间可能会忘记,最好的办法就是找到原来的代码看一看.现在可以将代码免费托管到一些网站上,其中最著名的非github莫属了, 今天就把这个过 ...
- 【Python】实现将testlink上的用例指定格式保存至Excel,用于修改上传
背景 前一篇博客记录的可以上传用例到testlink指定用例集的脚本,内部分享给了之后,同事希望能将testlink上原有的用例下载下来,用于下次修改上传,所有有了本文脚本. 具体实现 获取用例信息 ...
- Page.TryUpdateModel 方法
使用来自值提供程序的值更新指定的模型实例. 使用来自值提供程序的值更新指定的模型实例. 命名空间: System.Web.UI程序集: System.Web(System.Web.dll 中) ...
- 101. Symmetric Tree -- 判断树结构是否对称
Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center). For e ...
- <NET CLR via c# 第4版>笔记 第9章 参数
9.1 可选参数和命名参数 class Program { private static int s_n = 0; private static void M(int x = 9, string s ...