添加小程序,兑换各种视频教程/数据资源。

1. 安装weex项目:参考:http://weex.apache.org/cn/guide/index.html。
                              参考:https://blog.csdn.net/qq_42231156/article/details/84837748。
                              参考:https://blog.csdn.net/xingxtao/article/details/79505997。

                              参考:http://jspang.com/post/weex.html


2. flex布局自适应:flex:0.3/1。
   

 <div class="header_nav">
        <div class="left box">
            <text>上海</text>
        </div>
        <div class="mid box">
            <text>搜索</text>
        </div>
        <div class="right box">
            <text>地图</text>
        </div>
    </div>
    .header_nav{
        display: flex;
        flex-direction: row;
        justify-content: space-between;
        align-items: center;
    }
    
    .left{
        flex:0.3;
        background-color:yellow ;
    }
    .right{
        flex:0.3;
        background-color:blueviolet ;
    }
    .mid{
        flex:1;
        background-color: yellowgreen;
    }                  

 
3. 报错:我在windows环境使用weexpack build ios 反馈 run ios unsupported on windows,不安装mac模拟器就没办法用weex来构建ipa。

4. 报错:Cannot destructure property `compile` of 'undefined' or 'null'。
       可能是webpack-dev-server版本太高,重新下载npm remove webpack-dev-server,npm install -D webpack-dev-server@2.9.1。    
       
5. weex环境中与web的差异:
  5.1 weex中没有dom,不支持dom操作。不支持 Web API,没有 Element 、Event 、File 等对象,详细列表可以参考 Web APIs on MDN。不支持选中元素,
          如 document.getElementById 、 document.querySelector 等;当然也不支持基于 DOM API 的程序库(如 jQuery)。
  5.2    没有 window 、screen 对象:
                  Weex 中并未提供浏览器中的 window 和 screen 对象,不支持使用全局变量。如果是想要获取设备的屏幕或环境信息,可以使用 WXEnvironment 变量。
                    WXEnvironment:
                            weexVersion: WeexSDK 的版本。
                            appName: 应用的名称。
                            appVersion: 应用的版本。
                            platform: 运行平台,可能的值是 Web 、Android 、iOS 之一。
                            osName: 系统的名称。
                            osVersion: 系统版本。
                            deviceWidth: 设备宽度。
                            deviceHeight: 设备高度。
    5.3  没有 document 对象:
    5.4  没有 history 、location 、navigator 对象:
    5.5  能够调用移动设备原生 AP:
如 clipboard 、 navigator 、storage 等。
    5.6 weex中只支持px,不支持em,rem,内边距,内容和边框之间的距离。默认值 0,外边距,元素和元素之间的空白距离。值类型为 length,默认值 0。设定边框宽度,非负值, 默认值 0。
    5.7  不支持background,border,transform ....的简写
    5.8 box-sizing:默认border-box。
    5.9  默认所有元素display:flex,不需要在写,Flexbox 是默认且唯一的布局模型。
    5.10 支持position定位
    5.11 不支持z-index,越靠后的元素,层级越高。
    5.12 如果定位元素超过容器边界,在 Android 下,超出部分将不可见,原因在于 Android 端元素 overflow 默认值为 hidden,但目前 Android 暂不支持设置 overflow: visible。
  5.13 Weex 支持四种伪类:active, focus, disabled, enabled,同时生效的时候,优先级高覆盖优先级低。
           .logo:active {           
                background-color: green;
              }        
    5.14  支持线型渐变(linear-gradient),不支持径向渐变(radial-gradient)。
    5.15 box-shadow仅仅支持iOS
    5.16 Weex 的原生运行机制支持从设备中加载图片,你只需要设置文件 url,例如 file:///sdcard/image_new0.png 这样的格式。但是 Weex 暂时还不支持加载你项目中的图片文件。
              参考https://blog.csdn.net/cui130/article/details/84026843。
    5.17 weex只支持单个class,不支持关系clss或多个class。
    5.18 Weex 盒模型基于 CSS 盒模型,每个 Weex 元素都可视作一个盒子(即包括content,padding,border,margin)。
    5.19 weex不支持float布局,只支持flex布局,支持position。真机上不支持百分比布局。
    5.20 不支持background,font,border,outline的简写。如:不支持(border:1px solid #ccc)。    
    5.21 只支持px单位,不支持em,rem。
    5.22 <text>标签中的属性.text{lines:3}表示最多3行,超过3行省略号。
    5.23 <list><cell>标签不能写样式。
    5.24 <video>标签在原生播放器中比较难看,可以引入其他播放器插件。

6. weex的list组件:组件是提供垂直列表功能的核心组件,拥有平滑的滚动和高效的内存管理,非常适合用于长列表的展示。

   <list class="list">
          <refresh class="refresh_loading" @refresh="onrefresh">    //refresh用于给列表添加下拉刷新的功能
              <text class="indicator-text">下拉加载 ...</text>    
              <loading-indicator class="indicator"></loading-indicator>
        </refresh>  
        <header>     //当 <header> 到达屏幕顶部时,吸附在屏幕顶部。
            <slot name="header"></slot>
        </header>
        <cell class="cell">   //<cell>用于定义列表中的子列表项,类似于 HTML 中的 ul 之于 li。Weex 会对 <cell> 进行高效的内存回收以达到更好的性能,需要设置最小高度,以撑开内容。
            <slot name="cell"></slot>
        </cell>
        <loading class="refresh_loading" >   //<loading> 用法与特性和 <refresh> 类似,用于给列表添加上拉加载更多的功能。
            <text class="indicator-text">上拉刷新 ...</text>            
        </loading>
      </list>

7. weex实战笔记:https://blog.csdn.net/weixin_42881744/article/details/81416699。

8. 通用事件:
    8.1 click:当组件上发生点击手势时被触发。<input> 和 <switch> 组件目前不支持 click 事件,请使用 change 或 input 事件来代替,
                    type: click。    
                    target: 触发点击事件的目标组件。
                    timestamp: 触发点击事件时的时间戳。
    8.2 longpress:那么当用户长按这个组件时,该事件将会被触发。<input> 和 <switch> 组件目前不支持longpress事件,请使用 change 或 input 事件来代替。
                    type : longpress。
                    target : 触发长按事件的目标组件。
                    timestamp : 长按事件触发时的时间戳。
    8.3 Appear:如果一个位于某个可滚动区域内的组件被绑定了 appear 事件,那么当这个组件的状态变为在屏幕上可见时,该事件将被触发。
                    type : appear。
                    target : 触发 Appear 事件的组件对象。
                    timestamp : 事件被触发时的时间戳。
                    direction : 触发事件时屏幕的滚动方向,up 或 down。
    8.4 Disappear:如果一个位于某个可滚动区域内的组件被绑定了 disappear 事件,那么当这个组件被滑出屏幕变为不可见状态时,该事件将被触发。
                    type : disappear
                    target : 触发 Disappear 事件的组件对象
                    timestamp : 事件被触发时的时间戳
                    direction : 触发事件时屏幕的滚动方向,up 或 down
    8.5 Page:仅支持 iOS 和 Android,H5 暂不支持。Weex 通过 viewappear 和 viewdisappear 事件提供了简单的页面状态管理能力。
                     viewappear 事件会在页面就要显示或配置的任何页面动画被执行前触发,例如,当调用 navigator 模块的 push 方法时,该事件将会在打开新页面时被触发。
                     viewdisappear 事件会在页面就要关闭时被触发。与组件的 appear 和 disappear 事件不同的是,viewappear 和 viewdisappear 事件关注的是整个页面的状态,
                      所以它们必须绑定到页面的根元素上。特殊情况下,这两个事件也能被绑定到非根元素的body组件上,例如wxc-navpage组件。                
                    type : viewappear 或 viewdisappear。
                    target : 触发事件的组件对象。
                    timestamp : 事件被触发时的时间戳。
                    
9. 事件冒泡:目前仅 Weex Native(Android 和 iOS)支持,web 端 暂时不支持此项特性。
    9.1 使用开启事件冒泡:注意事件冒泡默认是不开启的,你需要在模板根元素上加上属性 bubble=true 才能开启冒泡。
        如:    <template>            
                  <div bubble="true">    //开启事件冒泡机制。
                    ...
                  </div>
                </template>
    9.2 阻止事件冒泡:注意 event.stopPropagation 和 bubble=true 的影响范围不同,前者仅针对当前冒泡到的元素以及其祖先层级有效,而对子元素无效。而后者相当于一个全局开关,
                                开启以后对该根元素内部所有子元素都开启了事件冒泡效果。两者可以同时存在。
        如:    {
                  handleClick (event) {               
                    event.stopPropagation()  // 阻止继续冒泡.
                  }
                }        
                

10. weex的内置组件:
  10.1 <a>:用于实现页面间的跳转,<a> 的表现同 <div> 一致,  不能在 <a>中直接添加匿名文本,请用<text>包裹文本,支持通用样式和通用事件。待跳转的页面URL,
                  待跳转页面需要是一个Weex页面。如果待跳转页面是一个普通HTML,这会是一个未定义行为(即href="www.baidu.com"在移动端无法跳转到百度页面,在web端可以跳转到百度页面。)
      如:    <a href="http://dotwe.org/raw/dist/a5e3760925ac3b9d68a3aa0cc0298857.bundle.wx">
                <text>Jump</text>
              </a> 
    10.2 <div>:不能直接在里面添加文本(字符串),如果要展示文本,应该使用 <text> 组件。<div> 嵌套层级不可过深,否则容易引起性能问题,建议控制在 10 层以内。
                    支持包括 <div> 在内的任何组件作为自己的子组件。因此,在写一个组件时,推荐外层使用 <div> 作为根容器。<div> 在 移动端中不可滚动,即使显式设置高度也一样。
    10.3. <image>:用于在界面中显示单个图片,<img> 标签在 Weex 中不支持,你应该使用<image>。 Weex 没有内置的图片下载器,因为相关的下载、缓存、解码机制非常复杂,
                    一些开源的工具如 SDWebImage 已经处理得很好, 所以在使用 <image> 之前,请在 native 侧先接入相应的 adapter 或者 handle。且必须指定样式中的宽度和高度,否则无法工作。
                    Weex没有提供必须支持的图片格式列表,主要依赖于你正在使用的图片 adapter 或者 handler。                    
                    属性名/方法                               类型                                      值                                                               默认值                     描述
                    placeholder(属性)       String             {URL/Base64}                 -           占位图的 URL,当由 src 表示的图片下载完成并展示后将被删除。
                    resize(属性)             String             cover/contain/stretch        stretch     stretch(拉伸宽高覆盖页面),cover(宽高最小值贴近边缘),contain(宽高最大值贴近边缘)
                    src(属性)               String             {URL/Base64}                  -           强制属性,支持远程图片,但是本地图片需要配置图片存放位置,怎么配置?
                    
                    
                    Component(方法):保存图片内容到本地文件或相册,此操作可能需要设备相关权限。你必须加入NSPhotoLibraryAddUsageDescription 和 NSPhotoLibraryAddUsageDescription (iOS 11) 
                                                以获得访问 iOS 系统相册权限. 参见: Cocoa Keys.
                            callback:{Function} 在图片被写入到本地文件或相册后的回调,回调参数:
                            result:{Object} 回调结果对象,属性列表:
                            success:{Boolean} 标记图片是否已写入完成。
                            errorDesc:{String} 如果图像没有成功写入,该字符串包含了详细的错误描述。
                            
                    save(方法):在 <image>标签上增加 ref 属性。
                            <image ref="poster" src="path/to/image.png"></image>
                            const $image = this.$refs.poster
                            $image.save(result => {  //图片保存失败/成功处理事件
                              if (result.success) {                           
                              } else {
                                console.log(result.errorDesc)                            
                              }
                            })    
                            
                    load(方法):当加载完成 src 指定的图片时,load事件将被触发。
                            success: {Boolean} 标记图片是否成功加载。
                            size: {Object} 加载的图片大小对象,属性列表:
                                    naturalWidth: {Number} 图片宽度,如果图片加载失败则为0。
                                    naturalHeight: {Number} 图片高度,如果图片加载失败则为0
                            <image @load="onImageLoad" src="path/to/image.png"></image>
                                 methods: {
                                onImageLoad (event) {
                                  if (event.success) {    //图片加载成功后的处理事件                               
                                  }
                                }
                              }
    10.4 <slider>:轮播图。默认的轮播间隔为3秒。支持任意类型的 Weex 组件作为其子组件。你也可以放置一个 indicator 组件用于显示轮播指示器。
                                indicator 也只能作为 Slider 的子组件使用。
                    属性:
                        auto-play(boolean): 组件渲染完成时,是否自动开始播放,默认为 false.
                        interval(number): 轮播间隔,默认为 3000ms。
                        index(number): 设置显示slider的第几个页面。
                        offset-x-accuracy(number):控制 onscroll 事件触发的频率,默认值为10,表示两次 onscroll 事件之间滚动容器至少滚动了10px。
                                                                            将该值设置为较小的数值会提高滚动事件采样的精度,但同时也会降低页面的性能。
                        show-indicators(boolean): 是否显示指示器。
                        infinite(boolean): 设置是否可以无限轮播,默认为 true。
                        scrollable(boolean): 设置是否可以通过滑动手势来切换页面,默认为 true。
                        keep-index(boolean, Android可用): 设置轮播器中的数据发生变化后是否保持变化前的页面序号。
                        forbid-slide-animation(boolean, v0.7+ & iOS): iOS 平台默认支持动画,使用该属性可以强制关闭切换时的动画。                  
                    事件:
                        通用事件。
                        change: 当轮播索引改变时,触发该事件。
                        scroll:列表发生滚动时将会触发该事件。
    10.5 <indicator>:组件通常用于显示轮播图指示器效果,必须充当 <slider> 组件的子组件使用,且没有任何子组件。<indicator> 默认的宽高继承于 <slider>
                                    如果 <slider> 未设置宽高,需要显式的给 <indicator> 设置宽高值,background-color 不推荐使用,建议使用 item-color 和 item-selected-color 代替。
                                    支持所有通用样式和通用事件。
             <indicator> 组件有一些私有样式,如下:
                    item-color {color}:indicator指示点未被选中时的颜色,默认值为 #CCCCCC。
                    item-selected-color {color}:indicator指示点被选中时的颜色,默认值为 #444444。
                    item-size {number}:指示点的半径,默认为 5px。

<slider class="slider" interval="4500" @change="onchange">
     <div class="frame" v-for="img in imageList">
        <image class="image" resize="cover" :src="img.src"></image>
        <text class="title">{{img.title}}</text>
     </div>
     <indicator class="indicator"></indicator>
</slider>
<style>
 .indicator {
    width: 700px;
    height: 700px;
    item-color: green;  //指示器默认颜色
    item-selected-color: red;  //指示器选中时的颜色
    item-size: 50px;   //指示器园的大小
    position: absolute;   //必须写的属性
    top: 200px;  //相对.slider中心位置的偏移
    left: 200px;
  }
  .slider {
    width: 700px;
    height: 700px;
   }

</style>
  


    10.6 <input> 组件的 type 属性的。不支持 click 事件。请监听 input 或 change 来代替 click 事件。不支持子组件。
            特性:
                    type:包括如 text(默认值),date,datetime,email, password,tel,time,url,number 。
                    value {string}:组件的默认内容。
                    placeholder {string}:提示用户可以输入什么。 提示文本不能有回车或换行。
                    disabled {boolean}:布尔类型的数据,表示是否支持输入。通常 click 事件在 disabled 控件上是失效的。
                    autofocus {boolean}:布尔类型的数据,表示是否在页面加载时控件自动获得输入焦点。
                    maxlength {nubmer}:v0.7一个数值类型的值,表示输入的最大长度。
                    return-key-type {string}:v0.11键盘返回键的类型,支持 defalut;go;next;search;send,done。
                    auto-capitalization-type {string}:键盘自动大小写类型,支持 none;words;sentences;allCharacters
                    singleline {boolean}:控制内容是否只允许单行
                    max-length {number}:控制输入内容的最大长度
                    lines:控制输入内容的最大行数
                    max:控制当type属性为date时选择日期的最大时间,格式为yyyy-MM-dd
                    min:控制当type属性为date时选择日期的最小时间,格式为yyyy-MM-dd
            事件:
                    input: 输入字符的值更改。
                            e.value: 触发事件的组件;
                            e.timestamp: 事件发生时的时间戳,仅支持Android。
                    change: 当用户输入完成时触发。通常在 blur 事件之后
                            e.value: 触发事件的组件;
                            e.timestamp: 事件发生时的时间戳,仅支持Android。
                    focus: 组件获得输入焦点。
                            e.timestamp: 事件发生时的时间戳,仅支持Android。
                    blur: 组件失去输入焦点。
                            e.timestamp: 事件发生时的时间戳,仅支持Android。
                    return: 键盘点击返回键。
                            e.timestamp: 事件发生时的时间戳,仅支持Android。
                            e.value: 触发事件的组件的文本.

            10.7 <web>组件:用于在 weex 页面中显示由 src 属性指定的第三方页面内容。您还可以使用 webview 模块来控制 WebView 的行为,例如回退、前进和重新加载。<web> 不支持任何嵌套的子组件,并且必须指定 width 和 height 的样式属性,否则将不起作用。只支持公共事件中的 appear 和 disappear 事件,以及自有事件onPageStart,pagefinish,error,receivedtitle。

           

<web @pagestart="onPageStart" @pagefinish="onPageFinish" @error="onError" src="https://vuejs.org" @receivedtitle="receivedtitle"></web>

methods:{
    onPageStart(e){  //Web页面开始加载时调用,返回事件对象e.url: {String} 当前 Web 页面的 URL。       
    },
    onPageFinish(e){  //Web页面完成加载时调用,返回事件对象e.url: {String} 当前 Web 页面的 URL。e.canGoBack: {Boolean} 当前 Web 页面是否可以回退。e.canGoForward: {Boolean} 当前 Web 页面是否可以前进。e.title: {String} 当前 Web 页面的标题(仅限 iOS 平台)。
    },
    error(e){  //Web页面加载失败时调用,

    },
    receivedtitle(e){  //Web 页面的标题发生改变时调用(仅限 Android 平台)。返回事件对象e.url: {String} 当前 Web 页面的 URL
    }
}

11.  weex请求获取数据:参考weex文档。

#在.vue文件中
<script>
    const stream=weex.requireModule('stream');  //引入weex的内置数据请求stream模块
    export default{        
        methods:{
            getAxiosInfos(url,callback){
                return stream.fetch({
                    methods:'GET',   //{string}HTTP方法GET或是POST,GET请求不支持body方式传递参数,请使用 url 传参。
                    type:'json', //{string}响应类型 json,text 或是 jsonp {在原生实现中其实与 json 相同)。
                    url:url,   //{string}请求的 URL
                    headers:{object}, //HTTP 请求头
                    body:{string}   //HTTP 请求体,body 参数仅支持 string 类型的参数,请勿直接传递 JSON,必须先将其转为字符串。  
                },callback)   //callback响应结果回调,回调函数将收到如下的 response 对象:
                              //status{number}:返回的状态码
                              //ok {boolean}:如果状态码在 200~299 之间就为真。
                              //statusText {string}:状态描述文本
                              //data {Object | string}: 返回的数据,如果请求类型是 json 和 jsonp,则它就是一个 object ,如果不是,则它就是一个 string。
                             //headers {Object}:响应头
            }
        }
    }
//注意:默认 Content-Type 是 ‘application/x-www-form-urlencoded’。
//如果你需要通过 POST json , 需要将 Content-Type 设为 ‘application/json’。
</script>

 

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐