文档中心 > 千牛开放平台2.0

新增一个页面

更新时间:2017/04/19 访问次数:2301

传统的html页面,一个html就是一个页面。不同的是:在QAP中,一个页面的概念就是一个JS, 任何一个JS渲染后都可以成为一个页面。

页面的编写

在src目录下新建一个simpleText.jsx的文件,内容如下:

'use strict';

import { createElement, Component, render} from 'rax';
import { Text } from 'nuke';
import QN from 'QAP-SDK';

import genv from 'genv';

class SimpleText extends Component {

    render() {
        return (<Text>简单的文本</Text>)
    }
}

render(<SimpleText />);

保存后,代码QN.navigator.push({url:'qap:///simpleText.js?type=detail'});就能新开一个页面,渲染出一个新页面。

如何编写页面,在此不再赘述,请参考Nuke UI和后续的文档。


更改配置

Webpack配置

默认情况下,webpack.config.jsgetDevEntry方法会搜索src一级目录下的所有jsx文件,并生成[name].js,其中[name]就是文件名。

很多时候,随着业务的增多,src目录下面也需要建立目录。这个时候,webpack默认的配置已经无法满足需求了,需要手动更改配置。一般情况下,可以通过以下几种方式达到目的:


手动写entry

每增加一个页面都需要手动增加这个入口文件。

function getDevEntry(cwd) {
    var entry = {};
    entry.index = 'index.jsx';
    entry['index'] = 'index.jsx';
    entry['home'] = 'home/home.jsx';
    //qap:///home/home.js
    entry['home/home'] = 'home/home.jsx';

    return entry;
}

或者这样写:

function getDevEntry(cwd) {

    var entry = {
        index: 'index.jsx',
        'home/home': 'home/home.jsx',
        'home': 'home/home.jsx'
    };
    return entry;
}

搜索子目录

手动增加入口文件,比较繁琐,可以使用通配符匹配src下的子目录:

function getDevEntry(cwd) {

    var entry = {};
    glob.sync('**/**.jsx', { cwd: cwd }).forEach(function(item, i) {
        var file = item.replace('.jsx', '');
        entry[file] = [
            item
        ];
    });
    return entry;
}

这样一来所有的jsx文件都会成为入口文件,并且子目录下的源文件如src/home/home.jsx编译后也会带有目录信息,访问该页面的url为qap:///home/home.js


qap.json配置

qap.json描述页面能力的同时也列出了该插件所有可用的页面。出于安全考虑,未在qap.json声明的页面不会被渲染。如新增了src/home/home.jsx后,qap.json也需要增加该页面:

{
    "appKey": "21085832",
    "version": "1.0",
    "pages": [{
        "default": true,
        "url": "qap:///index.js"
    }, {
        "url": "qap:///home/home.js"
    }],
    "WebRootPath": "http://path/to/callback/url",
    "min_qn_android": "5.8.2",
    "min_qn_ios": "5.8.2",
    "jssdk": "1.0.10"
}

页面跳转

写完了jsx,更改了webpackqap.json,那么就可以打开这个页面了。所有的QAP项目页面的schema为qap:///,页面的url规则是:

qap:///[name].js
QN.navigator.push({
    url: 'qap:///home/home.js',
    query: {},
    settings: {
        animate: true,
    }
}).then(result => {
    console.log(result);
}, error => {
    console.log(error);
});

点击文章页面之间的跳转查看所有跳转方式。

FAQ

关于此文档暂时还没有FAQ
返回
顶部