Safe/Subset JavaScript (SJS) is a custom scripting language for miniapps. You can use SJS in AXML to build the structure of your pages.
SJS is a subset of JavaScript, but it is a separate language with a different syntax. Do not treat SJS as JavaScript.
Usage
You can define SJS in an .sjs file:
// pages/index/index.sjs
const message = 'hello alipay';
const getMsg = x => x;
export default {
message,
getMsg,
};// pages/index/index.js
Page({
data: {
msg: 'hello taobao',
},
});<!-- pages/index/index.axml -->
<import-sjs name="m1" from="./index.sjs"/>
<view>{{m1.message}}</view>
<view>{{m1.getMsg(msg)}}</view>Page output:
hello alipay
hello taobaoSJS can only be defined in
.sjsfiles, which are then imported into AXML using the<import-sjs>tag.SJS can call functions defined in other
.sjsfiles.SJS is a subset of JavaScript. Do not treat it as JavaScript.
The SJS runtime environment is isolated from other JavaScript code. SJS cannot call functions defined in other JavaScript files or call the APIs provided by the miniapp.
SJS functions cannot be used as component event callbacks.
SJS does not depend on the base library version and can run in all miniapp versions.
The import-sjs tag
Property | Type | Required | Description |
|---|---|---|---|
name | String | Yes | The module name for the current |
from | String | Yes | The relative path of the .sjs file to import. |
The name property specifies the module name for the current
<import-sjs>tag. Within a single AXML file, you must set a unique value for name. If duplicate module names exist, the latter import overwrites the former. Module names for<import-sjs>in different AXML files do not conflict with each other.The name property can be a string that specifies the default module name, or you can use the
{x}syntax for named module exports.
Sample code:
// pages/index/index.js
Page({
data: {
msg: 'hello alipay',
},
});// pages/index/index.sjs
function bar(prefix) {
return prefix;
}
export default {
foo: 'foo',
bar: bar,
};// pages/index/namedExport.sjs
export const x = 3;
export const y = 4;<!-- pages/index/index.axml -->
<import-sjs from="./index.sjs" name="test"></import-sjs>
<!-- You can also use a self-closing tag
<import-sjs from="./index.sjs" name="test" />
-->
<!-- Call the bar function from the test module with test.foo as the parameter -->
<view> {{test.bar(test.foo)}} </view>
<!-- Call the bar function from the test module with msg from page/index/index.js as the parameter -->
<view> {{test.bar(msg)}} </view>
<!-- Named export is supported -->
<import-sjs from="./namedExport.sjs" name="{x, y: z}" />
<view>{{x}}</view>
<view>{{z}}</view>Page output:
foo
hello alipay
3
4You must use the
.sjsfile extension for imports.An
.sjsmodule that is defined but never imported is not parsed or run.