iOS WeexSDK 如何将 Vue 文件绘制成原生UI

news2025/1/12 17:20:49

废话开篇:现在的跨平台开发尤其是以 vue 语法为主的 uniapp 框架,可以实现 vue 语法直接转换为原生 UI 组件的功能(.nvue 文件),可以理解成 .nvue 文件下的标签与 weex 库的原生注册的 UI 有对应的映射关系,或者说在 weex 库的基础上更丰富了原生 UI 库。下面就简单描述一下,vue 文件如何转化的原生 UI 组件。

一、实现效果

实现目标就是将一个简单的 vue 文件转换到 iOS 模拟器并以原生 UI 进行绘制。

1、单 vue 页面布局文件
<template><div class="weex"><div class="textDiv"><text class="text">{{ content }}</text></div></div>
</template>

<script>
export default {name: 'HelloWorld',data () {return {content: 'my name is weex iOS'}}
}
</script>

<style>
	.weex{
		flex-direction: column;
		justify-content: center;
		align-items: center;
	}
	.textDiv{
		padding-left: 10px;
		padding-top: 10px;
		padding-right: 10px;
		padding-bottom: 10px;
	}
	.text{
		color: black;
		text-align:center;
		font-size:32px;
		background-color: aquamarine;
	}
</style> 

上面是一段再简单不过的 vue 页面布局,它不依赖于任何工程,仅仅为单纯的 UI 页面

2、iOS 模拟器运行效果

看一下 UI 布局

二、创建一个 vue 编译目录

1、说明

vue 编译目录其实就是一个能将 vue 文件转换为最终 weex 能识别的 js 文件的一个目录结构

其中,vue 文件夹里面就是要转换的一个 vue 页面文件,dist 文件里面就是转换完后的输出 js 文件

dist 文件里面的 helloworld.js 就是通过 weex-loader 工具 转换 vue 文件后得到的 js 文件。这个 js 文件记录了 vue 页面的全部内容,并且能够被 weex iOSSDK 识别,最终会通过映射创建 iOS 原生UI组件进行绘制。

2、终端命令

2-1: 新建 iOSWeex 文件夹,在当前目录下进行初始化操作

npm init 创建编译目录

npm init 

没有特别要求一路点击回车即可,最后会创建一个 package.json 文件,打开并修改这个package.json 文件如下所示:

{"name": "iosweex","version": "1.0.0","description": "","main": "index.js","dependencies": {"babel-loader": "^8.0.6","weex-loader": "^0.7.12","webpack": "^2.2.1"},"scripts": {"build": "webpack","test": "echo \"Error: no test specified\" && exit 1"},"author": "","license": "ISC","devDependencies": {"webpack-cli": "^5.0.1"}
} 

这里主要是需要 weex-loader 依赖库,并且添加了脚本 build 命令,其实就是转换 vue 文件并输出 js 文件的操作。

2-2: npm install 加载依赖库

npm install 

运行之后会多出一个 node_modules 文件。

2-3: 创建 webpack.config.js 脚本

输入 touch webpack.config.js 创建该文件

touch webpack.config.js 

修改其内容为如下:

const webpack = require('webpack');
const path = require('path');

module.exports = {entry: './vue/HelloWorld.vue?entry=true',output: {path: path.resolve(__dirname, './dist'),filename: 'helloworld.js'},module: {
	rules: [
	{
	test: /\.vue(\?[^?]+)?$/,
	loaders: ['weex-loader']
	},
	{
	test: /\.js$/,
	loaders: ['babel-loader']
	}
	]
	},
	plugins: [
		new webpack.BannerPlugin({
			raw: true ,
			banner: '// { "framework": "Vue" }\n'
		})
	]
} 

这是需要设置待转换的 vue 文件路径和转化后的 js 文件输出路径,/vue/HelloWorld.vue?entry=true 后面需要紧跟 ?entry=true 否则,转换后无法正常显示。

entry: './vue/HelloWorld.vue?entry=true',output: {path: path.resolve(__dirname, './dist'),filename: 'helloworld.js'} 

2-4: 创建 vue 文件,里面需包含 vue 页面文件

2-5: 转换 vue 文件到输出目录

执行 npm run build 命令,开始转换 vue 页面文件

npm run build 

如果出现 This is probably not a problem with npm. There is likely additional logging output above 错误,可能是一些依赖库没有加载而打包的时候却要用,把缺少的依赖库加上,需清除一下缓存,再次进行依赖安装即可。

删除 node_modules 文件夹,删除 package-lock.json 文件并执行以下命令

npm cache clean --force
npm install 

dist 目录下的 helloworld.js 为最终需求文件

helloworld.js 就是 weex iOSSDK 能识别的文件了。

三、iOS 工程引入 weex SDK

1、cocopods 添加依赖
2、初始化 WeexSDK

AppDelegate 里进行一些初始化操作

[WXAppConfiguration setAppGroup:@"WSL"];
[WXAppConfiguration setAppName:@"Weex"];
[WXAppConfiguration setAppVersion:@"v1.0.0"];
//Initialize WeexSDK
[WXSDKEngine initSDKEnvironment]; 
3、WXBaseViewController 加载 helloworld.js 文件

WXBaseViewControllerWeexSDK里的一个默认加载 js 文件的控制器,这里可以直接用它来进行展示。

NSURL *pathUrl = [[NSBundle mainBundle] URLForResource:@"helloworld" withExtension:@"js"];
WeexViewController * weexViewController = [[WeexViewController alloc] initWithSourceURL:pathUrl];
self.window.rootViewController = weexViewController;
[self.window makeKeyAndVisible]; 
4、js 重要信息展示

vue 转换后的样式结构

module.exports = {
  "weex": {
    "flexDirection": "column",
    "justifyContent": "center",
    "alignItems": "center"
  },
  "textDiv": {
    "paddingLeft": "10",
    "paddingTop": "10",
    "paddingRight": "10",
    "paddingBottom": "10"
  },
  "text": {
    "color": "#000000",
    "textAlign": "center",
    "fontSize": "32",
    "backgroundColor": "#7FFFD4"
  }
} 

vue 转换后的标签结构,一个渲染函数。

module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
  return _c('div', {
    staticClass: ["weex"]
  }, [_c('div', {
    staticClass: ["textDiv"]
  }, [_c('text', {
    staticClass: ["text"]
  }, [_vm._v(_vm._s(_vm.content))])])])
},staticRenderFns: []} 

四、总结与思考

通过 WeexSDK 就将 vue 文件转换为 js 文件,并提供给 iOS 原生端使用了。除此之外,WeexSDK 还搭建了 js 与原生之前的通信能力,是不是非常类似 uniapp 的相关功能实现。没有特别复杂的代码,代码拙劣,大神勿笑[抱拳][抱拳][抱拳]

最后

最近找到一个VUE的文档,它将VUE的各个知识点进行了总结,整理成了《Vue 开发必须知道的36个技巧》。内容比较详实,对各个知识点的讲解也十分到位。



有需要的小伙伴,可以点击下方卡片领取,无偿分享

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/145841.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

String类详解(java)

文章目录&#x1f4d6;前言&#xff1a;&#x1f380;String类的构造方法两种创建形式&#x1fa85;**隐式创建&#xff1a;**&#x1fa85;**显式创建&#xff1a;**&#x1f380;String类底层结构&#xff1a;&#x1f380;String类常用方法&#xff1a;&#x1f4d6;前言&am…

神经网络漫谈(一):科普篇

神经网络漫谈(一):科普篇 发表时间&#xff1a; 2023年1月6日创作地点&#xff1a;湖北省武汉市作者&#xff1a;ixy_com&[Bill Kromydas]封面图片来源&#xff1a;Towards Data Science 1、背景 基本概念&#xff1a;神经网络&#xff0c;也称为人工神经网络 (ANN) 或…

Ubuntu22.04安装Docker以及Docker安装微信、企业微信、Docker常用命令

Ubuntu22.04安装Docker以及Docker安装微信、企业微信、Docker常用命令1 Docker引擎官网安装1.1 访问Docker官网下载社区版引擎并按照官网指导进行初步安装1.2 检查安装是否成功1.3 添加当前用户到docker组&#xff0c;不用每次都输入sudo。2 Docker安装微信2.1 拉取微信镜像2.2…

CSS基础(八)——CSS3新增样式

概述 前面7篇博客记录的所有 CSS 知识&#xff0c;都是 CSS2 版本的功能。 CSS3 在 CSS2 版本的基础上&#xff0c;新增了很多特性&#xff0c;例如边框圆角、动画效果。 在 CSS2 的时代&#xff0c;实现圆角必须要用图片才能实现&#xff0c;而 CSS3 只要一行样式就能实现…

SpringBoot+MySQL(官方案例)

在线文档项目结构 1.源码克隆&#xff1a;git clone https://github.com/spring-guides/gs-accessing-data-mysql.git 2.包含两个项目initial和complete&#xff0c;initial可以根据文档练习完善&#xff0c;complete是完整项目 3.功能描述&#xff1a;构建应用程序&#xff0c…

【jQuery】jQuery基础概念

一、JavaScript库1.仓库可以把很多东西放到这个仓库里面。找东西只需要到仓库里面查找到就可以了。2. JavaScript库即 library&#xff0c;是一个封装好的特定的集合&#xff08;方法和函数)。从封装一大堆函数的角度理解库&#xff0c;就是在这个库中&#xff0c;封装了很多预…

信息技术 安全技术 密钥管理

声明 本文是学习github5.com 网站的报告而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 前 言 GB/T 17901《信息技术 安全技术 密钥管理》分为六个部分&#xff1a; ——第1部分&#xff1a;框架&#xff1b; ——第2部分&#xff1a;使用对称技术的…

Odoo 16 企业版手册 - 库存管理之库位管理

库存位置 配置和管理Odoo 库存模块中可用位置的平台将帮助您定义仓库中存放产品的地方。在单个仓库中&#xff0c;您可以管理库存的多个位置。从库存模块的「设置」菜单中&#xff0c;您可以激活存储位置功能&#xff0c;如下所示&#xff0c;该功能将帮助您跟踪仓库中的产品位…

为什么使用消息中间件

为什么要使用消息中间件 如有一个电商交易的场景&#xff0c;用户下单之后调用库存系统减库存&#xff0c;然后调用物流系统进行发货&#xff0c;如果刚开始交易&#xff0c;库存&#xff0c;物流都是属于一个系统&#xff0c;那么他们之间就是接口调用。但是随着系统的发展&a…

FRP 内网穿透搭建(无域名)

一、为什么要内网穿透 FRP 可用于内网穿透的高性能的反向代理应用&#xff0c;支持 tcp, udp, http, https 协议。 使用场景&#xff1a;公网服务器监听某个端口等待内网服务器连接&#xff0c;内网服务器连接成功后&#xff0c;用户访问公网的某一个端口&#xff0c;访问的所…

Domino Web应用早就想到了环保

大家好&#xff0c;才是真的好。 前几周我们讲了Notes&#xff0c;上周讲了点管理&#xff0c;这周我们可以讲点开发。 我现在要讲的技术真的很古老&#xff0c;但现在却被越来越多的人提倡。 传统的Notes应用可以很简单地通过浏览器访问&#xff0c;以一个非常简单但又很使…

ESP32设备驱动-MCP9808数字温度传感器驱动

MCP9808数字温度传感器驱动 文章目录 MCP9808数字温度传感器驱动1、MCP9808介绍2、硬件准备3、软件准备4、驱动实现1、MCP9808介绍 MCP9808 数字温度传感器将 -20C 和 +100C 之间的温度转换为精度为 0.5C(最大值)的数字字。 MCP9808 带有用户可编程寄存器,可为温度传感应用…

联力L216装机心得

联力L216装机心得 2022年12月份装机笔记 参考视频 B站硬件茶谈装机&#xff1a;https://www.bilibili.com/video/BV1BG4y137mG/?spm_id_from333.337.search-card.all.click&vd_source8f7bdd23b317e50e9b9803f44de6a213 联力L216机箱介绍:https://www.bilibili.com/vid…

ArcGIS基础实验操作100例--实验57由点坐标生成面要素

本实验专栏参考自汤国安教授《地理信息系统基础实验操作100例》一书 实验平台&#xff1a;ArcGIS 10.6 实验数据&#xff1a;请访问实验1&#xff08;传送门&#xff09; 高级编辑篇--实验57 由点坐标生成面要素 目录 一、实验背景 二、实验数据 三、实验步骤 &#xff08;…

【Qt】自动查找Qt应用程序缺少的依赖库

【Qt】自动查找Qt应用程序缺少的依赖库1、背景2、实例3、验证1、背景 操作系统&#xff1a;windows10专业版&#xff0c;如下图&#xff1a; Qt版本&#xff1a;qt-opensource-windows-x86-msvc2013_64-5.7.1.exe 使用Qt安装后的qtcreator5.7.1开发Qt应用程序。 将编译生成的…

基于Vue和SpringBoot的超市账单管理系统的设计和实现

作者主页&#xff1a;Designer 小郑 作者简介&#xff1a;Java全栈软件工程师一枚&#xff0c;来自浙江宁波&#xff0c;负责开发管理公司OA项目&#xff0c;专注软件前后端开发&#xff08;Vue、SpringBoot和微信小程序&#xff09;、系统定制、远程技术指导。CSDN学院、蓝桥云…

【练习】Day03(未完成版)

努力经营当下&#xff0c;直至未来明朗&#xff01; 文章目录一、选择二、编程1. 括号生成2. 颜色分类答案1. 选择2. 编程提普通小孩也要热爱生活&#xff01; 一、选择 下列Java代码中的变量a、b、c分别在内存的____存储区存放。 class A {private String a “aa”;public…

SpringBoot+JPA(官方案例)

在线文档项目结构 1.源码克隆&#xff1a;git clone https://github.com/spring-guides/gs-accessing-data-jpa.git 2.包含两个项目initial和complete&#xff0c;initial可以根据文档练习完善&#xff0c;complete是完整项目 3.功能描述&#xff1a;构建应用程序&#xff0c;使…

相机标定中的战斗机--张氏标定法

张正友标定法--相机标定中的灭霸&#xff01;在上学期接触过calibration以后&#xff0c;下定决心要学一下张正友标定法的&#xff0c;然后没来的及学&#xff0c;寒假弥补一下。参考博客&#xff1a;https://zhuanlan.zhihu.com/p/136827980编辑切换为居中添加图片注释&#x…

车牌识别数据收集之自动化筛选工具

综述 最近在进行车牌识别的开发&#xff0c;在数据收集阶段除了那些特定的数据集&#xff08;开源数据集&#xff09;&#xff0c;还需要自己收集一些数据&#xff0c;这些数据主要来自如爬虫、行车记录视频、非特定数据集&#xff0c;而在这些数据集中&#xff0c;只有少量的…