codecamp

百度智能小程序 开始

介绍

SJS 是小程序一套自定义脚本语言,可以在 SWAN 中使用其辅助构建页面结构。

SJS 代码可以编写在swan文件中的 <import-sjs> 标签内,或以 sjs 为后缀名的文件内,然后在 SWAN 模板中进行引用。

SJS 自小程序基础库版本3.105.17 、开发者工具正式版2.13.1开始支持。
低版本需要做兼容处理,在逻辑层可以使用 swan.canIUse('sjs') 判断基础库是否支持 SJS 能力。其它兼容方式请参考 兼容性处理

模块

每一个 sjs 文件和 <import-sjs> 标签都是一个单独的模块。

每个模块都有自己独立的作用域。即在一个模块里面定义的变量与函数,默认为私有的,对其他模块不可见。

一个模块要想对外暴露其内部的私有变量与函数,可以通过 export 或者 module.exports 实现,使用 import 或者 require 引用。 

使用方式

sjs 文件

在小程序项目中创建以 sjs 为后缀的文件,然后可以在其中编写 sjs 脚本。

下述例子在 /pages/utils.sjs 的文件里面编写了sjs代码。该 .sjs 文件可以被其他的 .sjs 文件 或 SWAN 中的 <import-sjs> 标签引用。

代码示例 

在开发者工具中打开
  • 编写 SJS 逻辑
// pages/utils.sjs中编写SJS逻辑

const bar = function(name) {
    return 'swan-' + name;
}
const foo = 'hello swan';

export default {
    bar: bar,
    foo: foo
};

// 或者使用CMD的形式导出
// module.exports = {
//     bar: bar,
//     foo: foo
// };
  • 引用并调用 SJS
<!-- 在 pages/index/index 页面中 -->

<!-- 引用SJS -->
<import-sjs src="../utils.sjs" module="utils" />

<!-- 使用SJS -->
<view class="container">{{utils.bar(name)}}</view>
<view>{{utils.foo}}</view>
  • 页面显示结果
swan-sjs
hello swan

import-sjs 标签

import-sjs 标签有两个作用,一个是通过 src 属性引用其它 sjs 模块,此时标签可以为自闭和标签;另一个是使用其容纳 sjs 代码。

1.引用 sjs 文件

相关属性

属性名 类型 必填 说明
module String 当前<import-sjs>标签的模块名。必填字段。
src String 引用.sjs文件的路径,仅当本标签为单闭合标签或标签的内容为空时有效; 如果当做 sjs 代码容器标签,则不必填写。

module 属性

module 属性是当前 <import-sjs> 标签的模块名。在单个 swan 文件内,建议其值唯一。有重复模块名则按照先后顺序覆盖(后者覆盖前者)。不同文件之间的sjs模块名不会相互覆盖。

module 属性值的命名必须符合下面两个规则:

  • 首字符必须是:字母(a-zA-Z),下划线(_)
  • 剩余字符可以是:字母(a-zA-Z),下划线(_), 数字(0-9)

src 属性

src 属性可以用来引用其他的sjs文件模块。

引用的时候,要注意如下几点:

  • 只能引用 .sjs 文件模块。
  • sjs模块均为单例,sjs 模块在第一次被引用时,会自动初始化为单例对象。多个页面,多个地方,多次引用,使用的都是同一个 sjs 模块对象。
  • 如果一个 sjs 模块在定义之后,一直没有被引用,则该模块不会被解析与运行。
  • 在 sjs 模块中引用其他 sjs 文件模块,可以使用 require 函数。

代码示例 

在开发者工具中打开
<import-sjs src="./../tools.sjs" module="logic"></import-sjs>
// pages/utils.sjs中编写SJS逻辑

var foo = "hello world";
var bar = function (d) {
  return d;
}
module.exports = {
  FOO: foo,
  bar: bar,
};
module.exports.msg = "some msg";
var tools = require("utils.sjs");

console.log(tools.FOO);
console.log(tools.bar("tools.sjs"));
console.log(tools.msg);
  • 页面显示结果
hello world
tools.sjs
some msg

2.作为 SJS 代码容器

import-sjs 标签除了引用其它 sjs 模块,还可直接作为 SJS 代码的容器,使用 module 制定该模块名称,用法与上等同。

代码示例 

在开发者工具中打开
  • 在 SWAN 模板中定义并使用 SJS
<!-- 定义SJS -->
<import-sjs module="utils">
const bar = function(name) {
    return 'swan-' + name;
}
const foo = 'hello swan';

export default {
    bar: bar,
    foo: foo
};
</import-sjs>

<!-- 使用SJS -->
<view class="container">{{utils.bar(name)}}</view>
<view>{{utils.foo}}</view>

  • 页面显示结果
swan-sjs
hello swan

sjs 实际应用代码示例 

在开发者工具中打开

注意

  • 引用 sjs 模块时务必使用.sjs文件后缀。
  • sjs 只能定义在 .sjs 文件中,然后在 swan 文件中使用<import-sjs>标签引入。
  • sjs 可以调用其他 sjs 文件中定义的函数。
  • sjs 的运行环境和其它 JavaScript 代码是相互隔离的, 即 sjs 中不能调用其他 JavaScript 文件中定义的函数与 API。
  • sjs 函数不能作为组件事件回调。


百度智能小程序 CSS
百度智能小程序 变量
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

百度智能小程序开发文档

百度智能小程序 组件

百度智能小程序 地图

百度智能小程序 画布

百度智能小程序 API

百度智能小程序 界面

百度智能小程序 关注小程序引导组件

百度智能小程序 自定义组件

百度智能小程序 媒体

百度智能小程序 设备

百度智能小程序 拨打电话

百度智能小程序 内存警报

百度智能小程序 手机联系人

百度智能小程序 用户截屏事件

百度智能小程序 第三方平台

百度智能小程序 开放接口

百度智能小程序 百度收银支付

百度智能小程序 分包预下载

百度智能小程序 数据分析

百度智能小程序 服务端

百度智能小程序 云开发

百度智能小程序 初始化

百度智能小程序 云函数

百度智能小程序 服务端初始化

百度智能小程序 服务器获取上下文

百度智能小程序 服务端云函数

百度智能小程序 开发教程

百度智能小程序 功能开发

百度智能小程序 基本原理

百度智能小程序 小程序自动化

百度智能小程序 视频教程

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }