Vue 2.x 在 Weex 和 Web 中的差异

平台差异

Vue.js 最初是为 Web 平台设计的,虽然可以基于 Weex 开发原生应用,但是 Web 开发和原生开发毕竟不同,在功能和开发体验上都有一些差异,这些差异从本质上讲是原生开发平台和 Web 平台之间的差异,可以通过《Weex 和 Web 平台的差异》了解更多细节和原因。

由于运行平台存在差异,Weex 不支持 Vue 中与 DOM 相关的功能:

  • 不支持事件冒泡和捕获机制,.prevent 、.capture 、.stop 、.self 等事件修饰符在原生环境中无意义。
  • 键盘事件的 .{keyCode | keyAlias} 修饰符在原生环境中无意义。
  • 无法通过 vm.$el 获取界面元素,原生环境中没有 DOM Element。
  • 无需自行调用 vm.$mount,默认会将入口组件挂载到原生应用的视图中。
  • 不支持 v-html 和 v-text 指令。

功能差异

仅引入了 Vue Runtime

Vue 除了提供默认的完整包以外,还提供一个更小巧的 vue.runtime.js,在这个文件中移除了模板编译的相关操作,Weex 中也仅引入 Vue Runtime 的功能,这样做除了可以减少代码体积以外,还能减少运行期编译模板的负担,提升性能。

具体的差异有:

  • 定义组件时不支持使用 template 属性。
  • 不支持使用 x-templates
  • 不支持使用 Vue.compile

隔离多页面的作用域

Weex 在原生端使用的是“多页”的实现,不同的 js bundle 将会在不同的原生页面中执行;也就是说,不同的 js bundle 之间将不同共享 js 变量。即使是 Vue 这个变量,在不同页面中也对应了不同的引用。

基于这个特性,Vue 中全局功能将只在当前页面内生效:

  • Vue.config
  • Vue.component
  • Vue.directive
  • Vue.filter
  • Vue.mixin
  • Vue.use

注:以上接口的功能并未受影响,只是其生效范围将会限制在同一页面内。

样式差异

Web 中的 CSS 非常的灵活,积累了特别多的属性,支持多种布局方法;这是其优势,也是浏览器性能优化的一个瓶颈。

Weex 中的样式是由原生渲染器解析的,出于性能和功能复杂度的考虑,Weex 对 CSS 的特性做了一些取舍,使其更符合最佳实践。

单类名选择器和作用域

Weex 中只支持单个类名选择器,不支持关系选择器,也不支持属性选择器。


/* 支持单个类名选择器 */

.one-class {

font-size: 36px;

}

/* 不支持关系选择器 */

.parent > .child {

padding-top: 10px;

}

/* 不支持属性选择器,不支持 `v-cloak` 指令 */

[v-cloak] {

color: #FF6600;

}

这个只是对样式定义的限制,不影响样式类名的使用,在标签中可以添加多个样式类名,如:


<template>

<div class="one two three"><div>

</template>

组件级别的作用域

在 Weex 中,写在组件 <style> 里的样式只能用在当前组件中,默认是 scoped 作用域。为了保持和 Native 的一致性,建议在 .vue文件中写样式时,加上 scoped 属性,即: <style scoped>

支持的样式属性

Weex 支持的样式特性是 CSS 的子集,并且会不断扩充;在实现过程中我们参考了 CSS 属性在浏览器中的使用频率,优先实现其中频率最高的一些属性。

Weex 支持了基本的盒模型和 flexbox 布局,以及其他常用样式,详情可参考Weex 通用样式文档

在编写样式时,还应该注意一下几点:

  • 不需要写样式前缀。
  • Weex 不支持 display: none;,因此也不支持 v-show 指令。
  • 为了优化样式解析的效率,样式属性暂不支持简写,涉及一下属性:
    • border 、border-(top|bottom|left|right)
    • margin
    • padding
    • flex

编译环境的差异

在 Weex 中使用 Vue.js ,你所需要关注的运行平台除了 Web 之外还有 Android 和 iOS ,在开发和编译环境上还有一些不同点。针对 Web 和原生平台,将 Vue 项目源文件编译成目标文件,有两种不同的方式:

  • 针对 Web 平台,和普通 Vue 2.X 项目一样,可以使用任意官方推荐的方式编译源文件,如 Webpack + vue-loader 或者 Browserify + vueify 。
  • 针对 Android 和 iOS 平台,我们提供了 weex-loader 工具支持编译 .vue 格式的单文件组件;也就是说,目前只能使用 Webpack + weex-loader 来生成原生端可用的 js bundle。

使用 weex-loader

weex-loader 是 Webpack 的一个加载器,使用方法参考其官方文档。需要提醒的是,如果 Webpack 配置的入口文件是个 .vue 格式的文件的话,还需要额外传递 entry 参数,通常设置为 true,表示将当前组件作为入口组件。为了能正常匹配 .vue 文件,Webpack 配置文件中 weex-loader 的匹配规则也需要有所调整。


module.exports = {

// 针对 .vue 文件要添加 entry 参数

entry: ‘./path/to/App.vue?entry=true‘,

// 其他配置项 ...

module: {

loaders: [{

// 匹配包含了 entry 参数的 .vue 文件路径

test: /\.vue(\?[^?]+)?$/,

loaders: [‘weex-loader‘]

}]

},

}

如果使用 .js 文件作为 Webpack 配置的入口文件,则不需要额外配置这些参数,我们推荐使用 Javascript 文件作为编译的入口文件。

搭建原生开发环境

Weex 项目生成的是原生应用,学习一些开发原生应用的基础知识,会对你开发 Weex 项目很有帮助。参考《集成 Weex 到已有应用》了解更多信息。

时间: 2024-10-25 02:41:41

Vue 2.x 在 Weex 和 Web 中的差异的相关文章

Weex 和 Web 平台的差异

Weex 是一个跨平台解决方案,Web 平台只是其一种运行环境,除此之外还可以在 Android 和 iOS 客户端中运行.原生开发平台和 Web 平台之间的差异,在功能和开发体验上都有一些差异. Weex 环境中没有 DOM DOM(Document Object Model),即文档对象模型,是 HTML 和 XML 文档的编程接口,是 Web 中的概念.Weex 的运行环境以原生应用为主,在 Android 和 iOS 环境中渲染出来的是原生的组件,不是 DOM Element. 不支持

&quot;命名空间&quot;system.web&quot;中不存在类型或命名空间名称security&quot;错误解决方法

using System; using System.Collections.Generic; using System.Text; using System.Web; namespace 求md5 { class Program { static void Main(string[] args) { string str = GetMd5("xuwei"); Console.WriteLine(str); } public static string GetMd5(string st

CKEditor4 在java web中的应用说明(详细可行)

按照官方的说明书就可,这里主要注意一点!! 就是<script src="../ckeditor.js"></script>中js文件的路径问题,我的ckeditor文件夹是在WebContent文件夹下,jsp文件是同一层目录的,所以最后的代码应该是 <script type="text/javascript"src="./ckeditor/ckeditor.js"></script> 注意斜杆号

Viewport在开发手机Web中的应用

目前比较主流的移动设备系统包括 Android,IOS ,Symbian,BlackBerry 与Web OS.这些系统浏览器都是基于webkit核心,而webkit号称是一款全功能的移动浏览器,支持 HTML + CSS + JavaScript,但由于移动设备本身与PC的差异,导致我们开发的网页在移动设备上总是会存在一些不如人意的地方. Viewport 翻译为中文可以叫做"视区",大家都知道移动设备的屏幕一段都比PC小很多,webkit浏览器会将一个较大的"虚拟&quo

优化Web中的性能

优化Web中的性能 简介 web的优化就是一场阻止http请求最终访问到数据库的战争. 优化的方式就是加缓存,在各个节点加缓存. web请求的流程及节点 熟悉流程及节点,才能定位性能的问题.而且优化的顺序一般也是按请求的流程逐一优化.这里的流程只是做个概要,并不代表全面. 整个流程是以最快的方式让用户看到结果 定位的方法 思路是:把看不见的http,具体化.可视化. 定位是优化的前提.没有准确的定位就无法有效的解决问题. 浏览器 看整个请求的时间 看整个页面加载的时间 看页面加载的数据大小 看页

CSS3 生成内容(在Web中插入内容)

在Web中插入内容,在CSS2.1时代依靠的是JavaScript来实现.但进入CSS3进代之后我们可以通 过CSS3的伪类“:before”,“:after”和CSS3的伪元素“::before”.“::after”来实现,其关键是依靠CSS3中的 “content”属性来实现.不过这个属性对于img和input元素不起作用. content配合CSS的伪类或者伪元素,一般可以做以下四件事情: 功能 功能说明 none 不生成任何内容 attr 插入标签属性值 url 使用指定的绝对或相对地址

编译器错误消息: CS0234: 命名空间“System.Web”中不存在类型或命名空间名称“Optimization”(是否缺少程序集引用?)

署名:冯兵 今天我遇上一个问题:编译器错误消息: CS0234: 命名空间“System.Web”中不存在类型或命名空间名称“Optimization”(是否缺少程序集引用?). 让我烦恼了很长一段时间,怎么调试也不知道错在哪,后来问师兄才知道错在哪. 起因:修改一个功能模块的代码,怕影响到其他功能模块的功能实现,所以我新建了一个区域,把要修改模块的相关代码都复制过去,把带波浪线的提示都修改完后,   运行就出现这个错误. 解决方案:找到复制前和复制后的视图文件夹下的文件名为“Web.confi

java web中servlet、jsp、html 互相访问的路径问题。

在java web种经常出现 404找不到网页的错误,究其原因,一般是访问的路径不对. java web中的路径使用按我的分法可以分两种情况,当然啦两者使用相对路径是一致,本文只说绝对路径. 情况一.指向外部的web组件和本身关系不大的,这一类的有:html中使用路径的标签,比如<a>标签中的href;servlet和jsp中的重定向sendRedirect(path); 情况二.指向内部的web组件和本身有关系的,这一类我暂时看到的有:servlet或者jsp的转发 假设在myapp项目下有

java web 中的转发和重定向

假设应用程序的 contextPath 为 /ctx,在 http://localhost:8080/ctx/a/b 资源中,我们转发和重定向到 http://localhost:8080/ctx/x/y 资源,分别应该怎么写? 转发,是在同一个应用程序中,请求从由资源 A 处理,到由资源 B 处理.资源 A 和资源 B 属于同一个应用程序的资源,它们总是相对于该应用程序的 contextPath 而言的.转发的资源可以使用相对路径(不以 "/" 开头)和绝对路径(以 "/&