efront 3.21.1 → 3.21.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/apps/pay/alipay-callback.jsp +23 -0
- package/apps/pay/alipay.ico +0 -0
- package/apps/pay/alipay.jsp +99 -0
- package/apps/pay/alipay_test.html +3 -0
- package/apps/pay/alipay_test.js +16 -0
- package/apps/pivot/main.js +25 -2
- package/coms/basic/BigNumber.js +184 -0
- package/coms/basic/BigNumber_test.js +51 -0
- package/coms/basic/JSAM.js +1 -1
- package/coms/basic/cross_.js +30 -16
- package/coms/basic/submit_.js +19 -0
- package/coms/basic/valid.js +21 -0
- package/coms/frame/payment.html +34 -0
- package/coms/frame/payment.js +48 -0
- package/coms/frame/payment.less +35 -0
- package/coms/zimoli/data.js +1 -1
- package/coms/zimoli/input.js +4 -1
- package/coms/zimoli/model.js +5 -4
- package/coms/zimoli/render.js +2 -2
- package/coms/zimoli/select.js +5 -0
- package/coms/zimoli/selectList.js +9 -11
- package/coms/zimoli/zimoli.js +1 -1
- package/docs/compare.md +85 -82
- package/package.json +1 -1
- package/public/efront.js +1 -1
- package/coms/zimoli/BigNumber.js +0 -216
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
var paytype = data.getInstance("paytype");
|
|
2
|
+
function main(paytypes, price, subject = '网站扫码支付') {
|
|
3
|
+
var page = view();
|
|
4
|
+
page.innerHTML = payment;
|
|
5
|
+
renderWithDefaults(page, {
|
|
6
|
+
get paytype() {
|
|
7
|
+
return paytype.value;
|
|
8
|
+
},
|
|
9
|
+
set paytype(value) {
|
|
10
|
+
data.patchInstance("paytype", { value }, true);
|
|
11
|
+
},
|
|
12
|
+
|
|
13
|
+
get waycost() {
|
|
14
|
+
var pay = this.paytypes[this.paytype - 1];
|
|
15
|
+
if (!pay) return 0;
|
|
16
|
+
var cost = pay.cost;
|
|
17
|
+
if (isFunction(cost)) cost = cost.call(pay, price);
|
|
18
|
+
return BigNumber.fix(cost, 2);
|
|
19
|
+
},
|
|
20
|
+
get paysite() {
|
|
21
|
+
var pay = this.paytypes[this.paytype - 1];
|
|
22
|
+
if (!pay) return 'about:blank';
|
|
23
|
+
var url = pay.url;
|
|
24
|
+
if (isFunction(url)) url = url.call(pay, this.finalpay, subject);
|
|
25
|
+
else if (url) url += encode62.timeencode(this.finalpay + "," + subject);
|
|
26
|
+
return url;
|
|
27
|
+
},
|
|
28
|
+
get finalpay() {
|
|
29
|
+
return BigNumber.fix(BigNumber.add(this.price, this.waycost), 2);
|
|
30
|
+
},
|
|
31
|
+
paytypes,
|
|
32
|
+
price,
|
|
33
|
+
closeView() {
|
|
34
|
+
remove(page);
|
|
35
|
+
},
|
|
36
|
+
});
|
|
37
|
+
drag.on(page.firstChild, page);
|
|
38
|
+
resize.on(page);
|
|
39
|
+
data.bindInstance("paytype", function (type) {
|
|
40
|
+
console.log(type)
|
|
41
|
+
});
|
|
42
|
+
var frame = page.querySelector("iframe");
|
|
43
|
+
bind("message")(frame, function (e) {
|
|
44
|
+
var id = e.data;
|
|
45
|
+
cast(page, 'payment', id);
|
|
46
|
+
});
|
|
47
|
+
return page;
|
|
48
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
& {
|
|
2
|
+
border: 1px solid #000;
|
|
3
|
+
position: absolute;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
label {
|
|
7
|
+
display: inline-block;
|
|
8
|
+
padding: 0 16px 0 0;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
>.head {
|
|
12
|
+
-webkit-app-region: no-drag;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.body {
|
|
16
|
+
item {
|
|
17
|
+
display: block;
|
|
18
|
+
padding: 0 16px;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
iframe {
|
|
22
|
+
width: 256px;
|
|
23
|
+
height: 256px;
|
|
24
|
+
overflow: hidden;
|
|
25
|
+
border: none;
|
|
26
|
+
display: block;
|
|
27
|
+
margin: 20px auto;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
money {
|
|
31
|
+
display: block;
|
|
32
|
+
text-align: center;
|
|
33
|
+
color: red;
|
|
34
|
+
}
|
|
35
|
+
}
|
package/coms/zimoli/data.js
CHANGED
package/coms/zimoli/input.js
CHANGED
|
@@ -5,12 +5,15 @@ var number = function (event) {
|
|
|
5
5
|
var { value, type } = ipt;
|
|
6
6
|
if (keyCode === 13 || keyCode === 18 || keyCode === 37 || keyCode === 38 || keyCode === 39 || keyCode === 40 || keyCode === 8 || keyCode === 46 || keyCode === 9) {
|
|
7
7
|
}
|
|
8
|
-
else if (keyCode >=
|
|
8
|
+
else if (keyCode >= 48 && keyCode <= 57 || keyCode >= 96 && keyCode <= 105) {
|
|
9
9
|
if (this.value) {
|
|
10
10
|
if (this.fixed && this.value.replace(/^[^\.]+/, '').length > this.fixed ||
|
|
11
11
|
this.limit && this.value.length >= this.limit && !/\./.test(this.value)) {
|
|
12
12
|
event.preventDefault();
|
|
13
13
|
}
|
|
14
|
+
if(/^[+-]?0$/.test(this.value)){
|
|
15
|
+
event.preventDefault();
|
|
16
|
+
}
|
|
14
17
|
}
|
|
15
18
|
}
|
|
16
19
|
else if (keyCode === 110 || keyCode === 190) {
|
package/coms/zimoli/model.js
CHANGED
|
@@ -57,9 +57,10 @@ var constructors = {
|
|
|
57
57
|
password,
|
|
58
58
|
text: textarea,
|
|
59
59
|
number(e) {
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
60
|
+
var ipt = document.createElement('input');
|
|
61
|
+
ipt.setAttribute('type', e.field.type);
|
|
62
|
+
input(ipt);
|
|
63
|
+
return ipt;
|
|
63
64
|
},
|
|
64
65
|
date() {
|
|
65
66
|
var elem = document.createElement("input");
|
|
@@ -208,7 +209,7 @@ function main(elem) {
|
|
|
208
209
|
elem.setAttribute("type", field_type);
|
|
209
210
|
}
|
|
210
211
|
remove(elem.children);
|
|
211
|
-
field_type = field_type.replace(/\:[\d+\.]+$/, '');
|
|
212
|
+
if (isString(field_type)) field_type = field_type.replace(/\:[\d+\.]+$/, '');
|
|
212
213
|
if (readonly || field.readonly) {
|
|
213
214
|
if (field_type === "function") {
|
|
214
215
|
field_editor(elem);
|
package/coms/zimoli/render.js
CHANGED
|
@@ -867,9 +867,9 @@ function render(element, scope, parentScopes, lazy = true) {
|
|
|
867
867
|
var digest = lazy(refresh, -{});
|
|
868
868
|
render.digest = render.apply = render.refresh = digest;
|
|
869
869
|
render.parseRepeat = parseRepeat;
|
|
870
|
-
var eventsBinders = "fullscreenchange,load,change,click,paste,resize,keydown,keypress,keyup,input,drop".split(",").map(k => on(k));
|
|
870
|
+
var eventsBinders = "fullscreenchange,resize,load,change,click,paste,resize,keydown,keypress,keyup,input,drop".split(",").map(k => on(k));
|
|
871
871
|
var userChanged = false;
|
|
872
|
-
eventsBinders.splice(0,
|
|
872
|
+
eventsBinders.splice(0, 3).forEach(on => on(window, digest));
|
|
873
873
|
var changeListener = function () {
|
|
874
874
|
if (userChanged) {
|
|
875
875
|
userChanged = false;
|
package/coms/zimoli/select.js
CHANGED
|
@@ -112,6 +112,7 @@ function select(target, list, removeOnSelect, direction) {
|
|
|
112
112
|
if (isNode(list)) {
|
|
113
113
|
var initList = function () {
|
|
114
114
|
bindEvent();
|
|
115
|
+
list.value = target.value;
|
|
115
116
|
initList = function () { };
|
|
116
117
|
};
|
|
117
118
|
var setIcon = function () {
|
|
@@ -123,8 +124,10 @@ function select(target, list, removeOnSelect, direction) {
|
|
|
123
124
|
var initList2 = function (src) {
|
|
124
125
|
src.forEach(s => {
|
|
125
126
|
optionsMap[s.key] = s;
|
|
127
|
+
s.selected = s.key === target.value;
|
|
126
128
|
});
|
|
127
129
|
list = selectList(generator, src, !!target.multiple, !!target.editable);
|
|
130
|
+
list.value = target.value;
|
|
128
131
|
if (!target.multiple) {
|
|
129
132
|
onclick(list, onlistclick);
|
|
130
133
|
}
|
|
@@ -137,6 +140,8 @@ function select(target, list, removeOnSelect, direction) {
|
|
|
137
140
|
var s = optionsMap[v];
|
|
138
141
|
this.innerHTML = `<option selected value="${v}">${s ? s.name : ''}</option>`;
|
|
139
142
|
this.value = v;
|
|
143
|
+
if (s) s.selected = true;
|
|
144
|
+
if (list) list.value = v;
|
|
140
145
|
};
|
|
141
146
|
care(target, initList2);
|
|
142
147
|
var initList = function () {
|
|
@@ -74,17 +74,15 @@ function main() {
|
|
|
74
74
|
css(item, { backgroundImage: `url('${icon}')` });
|
|
75
75
|
}
|
|
76
76
|
item.value = key;
|
|
77
|
-
if (
|
|
77
|
+
if (item.value === page.value) {
|
|
78
78
|
iconed = icon;
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
page.value = key
|
|
87
|
-
}
|
|
79
|
+
item.setAttribute("selected", "");
|
|
80
|
+
page.activeNode = item;
|
|
81
|
+
page.value = key
|
|
82
|
+
}
|
|
83
|
+
else if (multiple && option.selected) {
|
|
84
|
+
item.setAttribute("selected", "");
|
|
85
|
+
page.value.push(key);
|
|
88
86
|
}
|
|
89
87
|
if (option.disabled) {
|
|
90
88
|
item.setAttribute('disabled', '');
|
|
@@ -107,7 +105,7 @@ function main() {
|
|
|
107
105
|
if (i < 0 || i >= children.length) return;
|
|
108
106
|
return createItem(generator ? generator(i) : children[i]);
|
|
109
107
|
});
|
|
110
|
-
once("
|
|
108
|
+
once("mounted")(page, function () {
|
|
111
109
|
var index = 0;
|
|
112
110
|
for (var cx = 0, dx = children.length; cx < dx; cx++)if (children[cx].selected) index = cx;
|
|
113
111
|
page.clean();
|
package/coms/zimoli/zimoli.js
CHANGED
|
@@ -168,7 +168,7 @@ function go(pagepath, args, history_name, oldpagepath) {
|
|
|
168
168
|
fullfill_is_dispatched = 0;
|
|
169
169
|
}
|
|
170
170
|
addGlobal(_page, history_name, isDestroy);
|
|
171
|
-
page_object.prepares.forEach(function (url) {
|
|
171
|
+
page_object.prepares.splice(0, page_object.prepares.length).forEach(function (url) {
|
|
172
172
|
if (isNumber(url)) {
|
|
173
173
|
url = _history[url < 1 ? _history.length + url - 1 : url];
|
|
174
174
|
}
|
package/docs/compare.md
CHANGED
|
@@ -1,45 +1,56 @@
|
|
|
1
1
|
# efront 对比angular/react/vue
|
|
2
2
|
|
|
3
3
|
* efront 是一个开发环境,不是一个依赖库,同时efront提供了浏览器模式的组件库 `zimoli` ,该组件库以离散功能的方式提供,允许使用但不强制使用任何一项。
|
|
4
|
-
*
|
|
4
|
+
* 这里只摆事实,不做评价。类似某e官方“贬低他人抬高自己”的行为不为efront所齿。
|
|
5
5
|
* 后文web部分的对比,使用efront环境下的`zimoli`组件库作为参考
|
|
6
6
|
|
|
7
7
|
## 表面参数对比
|
|
8
8
|
|
|
9
|
-
| 对比项\框架 | angular
|
|
10
|
-
|
|
11
|
-
Hello World 目标代码 | >30kb
|
|
12
|
-
开发环境启动时间 | >2s
|
|
13
|
-
开发语言 | ts/html/less/sass/scss
|
|
14
|
-
|
|
15
|
-
官方路由 | angular-router, 使用前需要注册路径 | react-router, 使用前需要注册路径 | vue-router,
|
|
16
|
-
跨域实现 | 配置浏览器或服务器 |
|
|
17
|
-
代码加载方案 | 一次加载/或访问时加载
|
|
18
|
-
|
|
19
|
-
|
|
9
|
+
| 对比项\框架 | efront/(zimoli) | angular | react | vue |
|
|
10
|
+
| -------------------- | ---------------------------------------------------------------------- | ---------------------------------- | -------------------------------- | ------------------------------ |
|
|
11
|
+
| Hello World 目标代码 | ≈1kb; | >30kb | >30kb | ≈30kb; |
|
|
12
|
+
| 开发环境启动时间 | ≈0s; | >2s | >2s | >2s |
|
|
13
|
+
| 开发语言 | js/html/less/ts | ts/html/less/sass/scss | jsx/css/js/ts/html | html/css/js |
|
|
14
|
+
| 导出组件依赖项 | 无 | angular | react | vue |
|
|
15
|
+
| 官方路由 | zimoli,使用前无需注册路径 | angular-router, 使用前需要注册路径 | react-router, 使用前需要注册路径 | vue-router, 使用前需要注册路径 |
|
|
16
|
+
| 跨域实现 | 开发环境内置 | 配置浏览器或服务器 | 配置浏览器或服务器 | 配置浏览器或服务器 |
|
|
17
|
+
| 代码加载方案 | 依赖加载/自动预加载/手动预加载`preapre('/page/path');` / 动态路径访问时加载 | 一次加载/或访问时加载 | 一次加载/或访问时加载 | 一次加载/或访问时加载 |
|
|
18
|
+
| 跳转传参 | `go`(pagepath, params) | 略 | 略 | 略 |
|
|
19
|
+
| 异步对象传参 | `cast`(target, data) 
 `care`(target, handle) | 略 | 略 | 略 |
|
|
20
20
|
|
|
21
21
|
## 架构对比
|
|
22
22
|
|
|
23
|
-
### 1.
|
|
23
|
+
### 1. efront/zimoli
|
|
24
|
+
|
|
25
|
+
efront环境下,用户在隔离的环境中直接操作或创建dom元素,zimoli/render负责元素之间的组装和绑定。
|
|
26
|
+
|
|
27
|
+
### 2. angular 1~9
|
|
24
28
|
|
|
25
29
|
angular1将视图和逻辑隔离,js可通过更新scope上的数据以达到更新视图的目的,用户在视图上的输入可通过绑定关系自动同步到scope,后angular2+将scope抽象为typescript的class的实例,其实际用途不变。angular自身的逻辑维护的是数据与视图的绑定关系。
|
|
26
30
|
|
|
27
|
-
###
|
|
31
|
+
### 3. react
|
|
28
32
|
|
|
29
33
|
react 通过虚拟dom与视图保持同步,每次渲染前,通过用户逻辑重构虚拟dom,react则维护虚拟dom与视图的同步。
|
|
30
34
|
|
|
31
|
-
###
|
|
35
|
+
### 4. vue
|
|
32
36
|
|
|
33
37
|
vue使用Object.defineProperty进行数据绑定,与angular通过事件绑定的机制有所区别,但也是将视图与逻辑隔离,维护数据与视图的绑定关系。
|
|
34
38
|
|
|
35
|
-
### 4. efront/zimoli
|
|
36
|
-
|
|
37
|
-
efront环境下,用户在隔离的环境中直接操作或创建dom元素,zimoli/render负责元素之间的组装和绑定。
|
|
38
39
|
|
|
39
40
|
## 语法对比
|
|
40
41
|
|
|
41
42
|
### 1. 条件结构
|
|
42
43
|
|
|
44
|
+
```xml
|
|
45
|
+
<!-- efront/(zimoli) 使用 render(element,scope)功能 -->
|
|
46
|
+
<component1 ng-if="expression"> </component1>
|
|
47
|
+
<!-- 或者 -->
|
|
48
|
+
<component1 v-if="expression"> </component1>
|
|
49
|
+
<!-- 或者任意前缀 -->
|
|
50
|
+
<component1 x-if="expression"> </component1>
|
|
51
|
+
<!-- 下文中以ng-开头的efront说明都可以修改前缀 -->
|
|
52
|
+
```
|
|
53
|
+
|
|
43
54
|
```xml
|
|
44
55
|
<!-- angular 1.x -->
|
|
45
56
|
<component1 ng-if="expression" ></component1>
|
|
@@ -59,18 +70,16 @@ render(){
|
|
|
59
70
|
<component1 v-if="expression"></component1>
|
|
60
71
|
```
|
|
61
72
|
|
|
73
|
+
### 2. 循环结构
|
|
74
|
+
|
|
62
75
|
```xml
|
|
63
76
|
<!-- efront/(zimoli) 使用 render(element,scope)功能 -->
|
|
64
|
-
<component1 ng-
|
|
65
|
-
|
|
66
|
-
<component1
|
|
67
|
-
|
|
68
|
-
<component1 x-if="expression"> </component1>
|
|
69
|
-
<!-- 下文中以ng-开头的efront说明都可以修改前缀 -->
|
|
77
|
+
<component1 ng-repeat="(item,index) in expression"></component1>
|
|
78
|
+
<component1 v-for="(item,index) in expression"></component1>
|
|
79
|
+
<component1 ng-repeat="item in expression"></component1>
|
|
80
|
+
<component1 v-for="item in expression"></component1>
|
|
70
81
|
```
|
|
71
82
|
|
|
72
|
-
### 2. 循环结构
|
|
73
|
-
|
|
74
83
|
```xml
|
|
75
84
|
<!-- angular 1.x -->
|
|
76
85
|
<component1 ng-repeat="(item,index) in expression" ></component1>
|
|
@@ -96,16 +105,22 @@ render(){
|
|
|
96
105
|
<component1 v-for="item in expression"></component1>
|
|
97
106
|
```
|
|
98
107
|
|
|
108
|
+
### 3. 数据绑定
|
|
109
|
+
|
|
99
110
|
```xml
|
|
100
111
|
<!-- efront/(zimoli) 使用 render(element,scope)功能 -->
|
|
101
|
-
<component1 ng-
|
|
102
|
-
|
|
103
|
-
<
|
|
104
|
-
<
|
|
112
|
+
<component1 ng-bind="expression"></component1>
|
|
113
|
+
<!-- efront/(zimoli) 使用 render(element,scope)功能 设置 js对象属性 element[key]=value -->
|
|
114
|
+
<image _src="expression" />
|
|
115
|
+
<image .src="expression" />
|
|
116
|
+
<image :src="expression" />
|
|
117
|
+
<!-- efront/(zimoli) 使用 render(element,scope)功能 设置 元素属性 element.setAttribute(key,value) -->
|
|
118
|
+
<image src_="expression" />
|
|
119
|
+
<image src.="expression" />
|
|
120
|
+
<image src:="expression" />
|
|
121
|
+
<image src@="expression" />
|
|
105
122
|
```
|
|
106
123
|
|
|
107
|
-
### 3. 数据绑定
|
|
108
|
-
|
|
109
124
|
```xml
|
|
110
125
|
<!-- angular 1.x -->
|
|
111
126
|
<component1 ng-bind="expression" ></component1>
|
|
@@ -132,21 +147,16 @@ render(){
|
|
|
132
147
|
<image :src="expression" />
|
|
133
148
|
```
|
|
134
149
|
|
|
150
|
+
### 4. 双向/逆向/事件绑定
|
|
151
|
+
|
|
135
152
|
```xml
|
|
136
153
|
<!-- efront/(zimoli) 使用 render(element,scope)功能 -->
|
|
137
|
-
<component1 ng-
|
|
138
|
-
|
|
139
|
-
<
|
|
140
|
-
<
|
|
141
|
-
<image :src="expression" />
|
|
142
|
-
<!-- efront/(zimoli) 使用 render(element,scope)功能 设置 元素属性 element.setAttribute(key,value) -->
|
|
143
|
-
<image src_="expression" />
|
|
144
|
-
<image src.="expression" />
|
|
145
|
-
<image src:="expression" />
|
|
146
|
-
<image src@="expression" />
|
|
154
|
+
<component1 ng-model="expression"></component1>
|
|
155
|
+
<component1 ng-click="expression"></component1>
|
|
156
|
+
<component1 @click="expression"></component1>
|
|
157
|
+
<component1 v-on:click="expression"></component1>
|
|
147
158
|
```
|
|
148
159
|
|
|
149
|
-
### 4. 双向/逆向/事件绑定
|
|
150
160
|
|
|
151
161
|
```xml
|
|
152
162
|
<!-- angular 1.x -->
|
|
@@ -171,16 +181,40 @@ render(){
|
|
|
171
181
|
<component1 @click="expression" ></component1>
|
|
172
182
|
```
|
|
173
183
|
|
|
174
|
-
```xml
|
|
175
|
-
<!-- efront/(zimoli) 使用 render(element,scope)功能 -->
|
|
176
|
-
<component1 ng-model="expression"></component1>
|
|
177
|
-
<component1 ng-click="expression"></component1>
|
|
178
|
-
<component1 @click="expression"></component1>
|
|
179
|
-
<component1 v-on:click="expression"></component1>
|
|
180
|
-
```
|
|
181
|
-
|
|
182
184
|
### 5. 定义web组件
|
|
183
185
|
|
|
186
|
+
```javascript
|
|
187
|
+
// efront/(zimoli) 使用 render(element,scope)功能
|
|
188
|
+
|
|
189
|
+
var htmlFileData={toString(){
|
|
190
|
+
// 如果有同名的html文件,将自动生成类似的代码
|
|
191
|
+
// 渲染前的一次性绑定可以在这里进行
|
|
192
|
+
return `<btn></btn>文件内容${i18n.key1}`;
|
|
193
|
+
}};
|
|
194
|
+
var i18n={key1:value1};
|
|
195
|
+
|
|
196
|
+
function main(elem){
|
|
197
|
+
// 构造方法
|
|
198
|
+
// 可以使用已挂载或未挂载的元素
|
|
199
|
+
// 可以使用传入的元素或者创建一个新的元素;
|
|
200
|
+
elem = elem || document.createElement("div");
|
|
201
|
+
elem.innerHTML = htmlFileData;
|
|
202
|
+
onappend(elem,function(event){
|
|
203
|
+
// 挂载之后触发,必要时可以绑定
|
|
204
|
+
});
|
|
205
|
+
onremove(elem,function(event){
|
|
206
|
+
// 移除之前触发,必要时可以绑定
|
|
207
|
+
});
|
|
208
|
+
var scope = {
|
|
209
|
+
// html内使用的内容要在这里出现
|
|
210
|
+
btn: button, // 内部组件可以在渲染前重命名,以简化html中的tagName,方便在局部语境中编写和阅读
|
|
211
|
+
};
|
|
212
|
+
render(elem,scope);// 如果不使用,导出原生组件
|
|
213
|
+
// 如果存在同名的less文件,编译时自动绑定
|
|
214
|
+
return elem // 如果不传出,原有的元素不会被替换
|
|
215
|
+
}
|
|
216
|
+
```
|
|
217
|
+
|
|
184
218
|
```typescript
|
|
185
219
|
// angular 1.x
|
|
186
220
|
var app=angular.module("modulename");
|
|
@@ -286,34 +320,3 @@ class ComponentName extends Component {
|
|
|
286
320
|
<style></style>
|
|
287
321
|
```
|
|
288
322
|
|
|
289
|
-
```javascript
|
|
290
|
-
// efront/(zimoli) 使用 render(element,scope)功能
|
|
291
|
-
|
|
292
|
-
var htmlFileData={toString(){
|
|
293
|
-
// 如果有同名的html文件,将自动生成类似的代码
|
|
294
|
-
// 渲染前的一次性绑定可以在这里进行
|
|
295
|
-
return `<btn></btn>文件内容${i18n.key1}`;
|
|
296
|
-
}};
|
|
297
|
-
var i18n={key1:value1};
|
|
298
|
-
|
|
299
|
-
function main(elem){
|
|
300
|
-
// 构造方法
|
|
301
|
-
// 可以使用已挂载或未挂载的元素
|
|
302
|
-
// 可以使用传入的元素或者创建一个新的元素;
|
|
303
|
-
elem = elem || document.createElement("div");
|
|
304
|
-
elem.innerHTML = htmlFileData;
|
|
305
|
-
onappend(elem,function(event){
|
|
306
|
-
// 挂载之后触发,必要时可以绑定
|
|
307
|
-
});
|
|
308
|
-
onremove(elem,function(event){
|
|
309
|
-
// 移除之前触发,必要时可以绑定
|
|
310
|
-
});
|
|
311
|
-
var scope = {
|
|
312
|
-
// html内使用的内容要在这里出现
|
|
313
|
-
btn: button, // 内部组件可以在渲染前重命名,以简化html中的tagName,方便在局部语境中编写和阅读
|
|
314
|
-
};
|
|
315
|
-
render(elem,scope);// 如果不使用,导出原生组件
|
|
316
|
-
// 如果存在同名的less文件,编译时自动绑定
|
|
317
|
-
return elem // 如果不传出,原有的元素不会被替换
|
|
318
|
-
}
|
|
319
|
-
```
|