美文网首页
快应用入门学习记录-01

快应用入门学习记录-01

作者: zhyzhyzz | 来源:发表于2019-11-08 10:07 被阅读0次

    0、项目结构

    ├── sign                      rpk包签名模块
    │   └── debug                 调试环境
    │       ├── certificate.pem   证书文件
    │       └── private.pem       私钥文件
    ├── src
    │   ├── Common                公用的资源和组件文件
    │   │   └── logo.png          应用图标
    │   ├── Demo                  页面目录
    │   |   └── index.ux          页面文件,可自定义页面名称
    │   ├── app.ux                APP文件,可引入公共脚本,暴露公共数据和方法等
    │   └── manifest.json         项目配置文件,配置应用图标、页面路由等
    └── package.json              定义项目需要的各种模块及配置信息
    
    //src:项目源文件夹
    //sign:签名模块,当前仅有debug签名,如果内测上线,请添加release文件夹,增加线上签名
    

    0.1、manifest.json文件详解

    a--应用包名(package)
    {
      "package": "com.example.demo"
    }
    b--应用名称(name)
    {
      "name": "太平洋网络"
    }
    c--应用图标(icon)
    {
      "icon": "/Common/logo.png"
    }
    d--应用版本名称、版本号(versionName、versionCode)
    {
      "versionName": "1.0",
      "versionCode": 1
    }
    e--配置接口列表(features)->内部api需先引入
    {
      "features": [{ "name": "system.fetch" }]
    }
    f--页面router
       f.1---首页 (router.entry)固定
       "假设工程根目录如下所示"
       └── src
        └── Demo 页面目录,存放各自页面私有的资源文件和组件文件
            └── index.ux  页面文件,文件名不必与父文件夹相同
        {
          "router": {
            "entry": "Demo"
          }
        }
        f.2---其他页面->页面路由对象(router.pages)
        component:页面对应的 ux 文件名
        path:页面路径,不填则默认为页面名称(<ProjectName>/src目录下,
        页面目录的相对路径)假设工程根目录如下所示
        └── src
        |── Demo 页面目录,存放各自页面私有的资源文件和组件文件
        |   └── index.ux   页面文件,文件名不必与父文件夹相同
        └── Doc
            └── Layout  页面目录,存放各自页面私有的资源文件和组件文件
                └── index.ux     页面文件,文件名不必与父文件夹相同
        {
          "router": {
            "pages": {
              "Demo": {
                "component": "index"
              },
              "Doc/Layout": {
                "component": "index"
              }
            }
          }
        }
    g--display,页面公用的默认 UI 显示
        {
          "display": {
            "pages": {
              "Demo": {
                "titleBarText": "Demo页面的标题"
              }
            }
          }
        }
    
    

    1、生命周期

    页面生命周期:onInit、onReady、onShow、onHide、onDestroy、onBackPress
    、onMenuPress
    页面的状态:显示、隐藏、销毁
    APP 的生命周期:onCreate、onDestroy
    
    a-"onInit()"
    表示ViewModel的数据已经准备好,可以开始使用页面中的数据
    b-"onReady()"
    表示ViewModel的模板已经编译完成,可以开始获取
    DOM 节点(如:this.$element(idxxx))
    c-"onDestroy()"
    页面被销毁时调用,被销毁的可能原因有:用户从当前页面返回到上一页,
    或者用户打开了太多的页面,框架自动销毁掉部分页面,避免占用资源
    所以,页面销毁时应该做一些释放资源的操作,
    如:取消接口订阅监听geolocation.unsubscribe()
    判断页面是否处于被销毁状态,可以调用ViewModel的$valid属性:
    true表示存在,false表示销毁
    d-"onBackPress()"
    当用户点击返回实体按键、左上角返回菜单、调用返回API时触发该事件
    e-"onMenuPress()"
    当使用原生的顶部标题栏时,可以通过manifest.json中
    的menu属性配置是否显示右上角的菜单
    

    2、数据渲染

    总结:与微信小程序基本相同,使用{{}}方式渲染,在for循环中,
    默认"item=$item"、默认"index=$idx"
    一些条件判断例如微信->wx:if在快应用中都是直接将wx:去掉成了if="{{}}"、
    
    

    3、页面切换

    通过组件 a 切换页面和传递参数
    <a href="/PageParams/receiveparams">跳转到接收参数页面</a>
     <!-- 以非'/'开头的应用内页面的名称 -->
    <a href="PageParams/receiveparams">跳转到接收参数页面</a>
    <a href="tel:10086">调起电话</a>
    <a href="sms:10086">调起短信</a>
    <a href="mailto:example@xx.com">调起邮件</a>
    <!-- 打开webview加载网页 -->
    <a href="https://www.baidu.com/">打开网页</a>
    
    4、传递参数
    ?id=99&name=xxx
    
    5、通过接口 router 切换页面和传递参数
    // 导入模块
    import router from '@system.router'
    //使用方法
    router.push({
        uri: '/PageParams/receiveparams'
    })
    
    6、接收参数
    "protected 内定义的属性"
    //使用方法
    <script>
      export default {
        protected: {
          key: ''
        },
        onInit () {
          this.$page.setTitleBar({ text: '接收参数' })
    
          // js中输出页面传递的参数
          console.info('key: ' + this.key)
        }
      }
    </script>
    

    7、事件绑定

    onclick
    简写:@click
    

    8、事件监听

    //注册事件
    "$on('eventName')"
    可监听$emit()、 $dispatch()、 $broadcast()
    //触发事件
    "$emit(eventName)"
    
    "阻止事件冒泡:evt.stopPropagation()"
    onChildClickHandler (evt) {
        // 阻止事件冒泡
        "evt.stopPropagation()"
    }
    

    9、父子组件通信

    同vue
    

    10、监听页面数据变化watch

    data() {
        return {
          number:0
        }
    },
    onInit() {
        // 监听数据变化
        this.$watch('number', 'changeNumber')
    },
    changeNumber(newV, oldV){
        console.info(`监听数据变化:`, newV, oldV)
    }
    

    11、组件

    "组件引入"
    <import name="XXX" src="XXX"></import>
    
    

    相关文章

      网友评论

          本文标题:快应用入门学习记录-01

          本文链接:https://www.haomeiwen.com/subject/jzlibctx.html