@doubao-apps/create 0.0.28 → 0.0.29

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.
Files changed (27) hide show
  1. package/dist/template-empty/README.md +8 -6
  2. package/dist/template-empty/package.json +2 -2
  3. package/dist/template-empty/references/examples/common-patterns.md +4 -15
  4. package/dist/template-empty/references/examples/component-basics.md +34 -17
  5. package/dist/template-empty/references/guides/component-development.md +103 -69
  6. package/dist/template-empty/references/guides/performance-optimization.md +0 -2
  7. package/dist/template-empty/references/guides/troubleshooting.md +0 -4
  8. package/dist/template-empty/references/reference/framework-api-quick-ref.md +52 -39
  9. package/dist/template-empty/references/reference/open-api/01-/345/237/272/347/241/200-/350/264/246/345/217/267-/347/263/273/347/273/237.md +12 -2
  10. package/dist/template-empty/references/reference/open-api/10-/350/256/276/345/244/207-/350/256/276/345/244/207/346/226/271/345/220/221.md +34 -0
  11. package/dist/template-empty/references/reference/open-api/README.md +1 -1
  12. package/dist/template-empty/references/reference/open-api.md +91 -2
  13. package/dist/template-empty/references/rules/dos-and-donts.md +113 -36
  14. package/dist/template-starter/package.json +2 -2
  15. package/dist/template-starter/references/examples/common-patterns.md +4 -15
  16. package/dist/template-starter/references/examples/component-basics.md +34 -17
  17. package/dist/template-starter/references/guides/component-development.md +103 -69
  18. package/dist/template-starter/references/guides/performance-optimization.md +0 -2
  19. package/dist/template-starter/references/guides/troubleshooting.md +0 -4
  20. package/dist/template-starter/references/reference/framework-api-quick-ref.md +52 -39
  21. package/dist/template-starter/references/reference/open-api/01-/345/237/272/347/241/200-/350/264/246/345/217/267-/347/263/273/347/273/237.md +12 -2
  22. package/dist/template-starter/references/reference/open-api/10-/350/256/276/345/244/207-/350/256/276/345/244/207/346/226/271/345/220/221.md +34 -0
  23. package/dist/template-starter/references/reference/open-api/README.md +1 -1
  24. package/dist/template-starter/references/reference/open-api.md +91 -2
  25. package/dist/template-starter/references/rules/dos-and-donts.md +113 -36
  26. package/dist/template-starter/src/app.config.ts +3 -29
  27. package/package.json +1 -1
@@ -7,8 +7,8 @@
7
7
 
8
8
  | API | 用途 | 示例 |
9
9
  |-----|------|------|
10
- | `definePage()` | 定义 Page 组件 | `definePage({ aiMeta: {...}, render() {...} })` |
11
- | `defineWidget()` | 定义 Widget 组件 | `defineWidget({ aiMeta: {...}, render() {...} })` |
10
+ | `definePage()` | 定义 Page 组件 | `definePage({ render() {...} })` |
11
+ | `defineWidget()` | 定义 Widget 组件 | `defineWidget({ render() {...} })` |
12
12
  | `defineApp()` | 定义 App 入口 | `defineApp({ onLaunch() {...} })` |
13
13
 
14
14
  ---
@@ -77,8 +77,8 @@ interface MyData {
77
77
  title: string;
78
78
  count: number;
79
79
  }
80
- const data = getViewData<MyData>();
81
- console.log(data.title, data.count);
80
+ const viewData = getViewData<MyData>();
81
+ console.log(viewData.title, viewData.count);
82
82
  ```
83
83
 
84
84
  **AIViewContext 类型**:
@@ -206,7 +206,7 @@ const phone = await getPhoneNumber();
206
206
 
207
207
  > `close()` 已废弃,公开路由场景请优先使用 `navigateBack()`。
208
208
  >
209
- > 常规页面跳转场景下,`url` 直接使用目标页面的 `pageId`,该值一般与页面的 `aiMeta.id` 一致;需要传参时可直接拼接 query string。
209
+ > 常规页面跳转场景下,`url` 直接使用目标页面的 `pageId`。显式配置时取 `src/app.config.ts` 中对应 page 的 `id`;不配置时取入口目录名,例如 `src/pages/detail/index.tsx` 默认为 `detail`。需要传参时可直接拼接 query string。
210
210
 
211
211
  ### showToast
212
212
 
@@ -461,36 +461,41 @@ const phone = await getPhoneNumber();
461
461
 
462
462
  # 常用类型
463
463
 
464
- ```typescript
465
- // Page Input
466
- interface PageInput {
467
- [key: string]: any; // URL 参数
468
- }
469
-
470
- // src/app.config.ts 中的 metadata 配置
471
- interface PageAIMeta {
472
- id: string; // 页面唯一标识
473
- title?: string; // 页面标题
474
- description?: string; // 页面描述
475
- }
476
-
477
- interface WidgetAIMeta {
478
- id: string; // 卡片唯一标识
479
- name?: string; // 卡片名称
480
- description?: string; // 卡片描述
481
- boxType?: 'inbox' | 'full_box'; // 卡片类型
482
- border?: boolean; // 是否显示边框
483
- keywords?: string[]; // 搜索关键词
484
- titleType?: 'none' | 'normal' | 'float';
485
- }
464
+ `src/app.config.ts` 需要配置 `appId` 和 `name`。Page / Widget metadata 使用可选的 `pages`、`widgets` 数组声明:
486
465
 
487
- // Widget 渲染数据类型
488
- interface WidgetViewData {
489
- title: string;
490
- content?: string;
491
- }
466
+ ```typescript
467
+ import { defineAppConfig } from '@doubao-apps/kit';
468
+
469
+ export default defineAppConfig({
470
+ appId: 'com.example.my-doubao-app',
471
+ name: '我的豆包应用',
472
+ pages: [
473
+ 'pages/home/index',
474
+ {
475
+ entry: 'pages/account/demo/index',
476
+ id: 'account-demo',
477
+ title: '账号示例页',
478
+ description: '多级目录页面示例'
479
+ }
480
+ ],
481
+ widgets: [
482
+ 'widgets/user-card/index',
483
+ {
484
+ entry: 'widgets/order/detail/index',
485
+ id: 'order-detail',
486
+ name: '订单详情卡片',
487
+ description: '多级目录卡片示例',
488
+ boxType: 'inbox',
489
+ border: true,
490
+ keywords: ['order'],
491
+ titleType: 'normal'
492
+ }
493
+ ]
494
+ });
492
495
  ```
493
496
 
497
+ 字符串数组项只声明入口,不补 metadata;对象数组项用于同时声明入口和 metadata。
498
+
494
499
  ---
495
500
 
496
501
  # 快速示例
@@ -498,17 +503,25 @@ interface WidgetViewData {
498
503
 
499
504
  ## 最小 App
500
505
 
506
+ ### src/app.config.ts
507
+
508
+ ```ts
509
+ import { defineAppConfig } from '@doubao-apps/kit';
510
+
511
+ export default defineAppConfig({
512
+ appId: 'com.doubao.react-lynx-template',
513
+ name: 'Doubao Apps SDK Template',
514
+ description: 'React Lynx 开发模板',
515
+ keywords: ['react', 'lynx', 'template', 'doubao']
516
+ });
517
+ ```
518
+
519
+ ### src/app.ts
520
+
501
521
  ```tsx
502
522
  import { defineApp } from "@doubao-apps/framework";
503
523
 
504
- // Define AI Metadata
505
524
  export default defineApp({
506
- aiMeta: {
507
- package: "com.doubao.react-lynx-template",
508
- name: "Doubao Apps SDK Template",
509
- description: "React Lynx 开发模板",
510
- keywords: ["react", "lynx", "template", "doubao"],
511
- },
512
525
  onLaunch() {
513
526
  console.log("App launched");
514
527
  },
@@ -482,7 +482,7 @@ showToast({
482
482
  ```ts
483
483
  expiredWidget({
484
484
  widgetInstanceId: 'instance_123',
485
- schema: '${pageId}?key=value'
485
+ url: '${pageId}?key=value'
486
486
  });
487
487
  ```
488
488
 
@@ -1851,18 +1851,28 @@ mcp入参,如果expectedAction里预期要调用工具,需要在这里写明
1851
1851
 
1852
1852
  点击失效卡要跳转的页面 detailText
1853
1853
 
1854
- ##### schema?
1854
+ ##### ~~schema?~~
1855
1855
 
1856
1856
  > `optional` **schema**: `string`
1857
1857
 
1858
1858
  点击失效卡要跳转的页面 schema,格式与 navigateTo 的 url 相同
1859
1859
 
1860
+ ###### Deprecated
1861
+
1862
+ 使用 url 字段替代 schema 字段,后续版本将移除 schema 字段,请尽快迁移到 url 字段
1863
+
1860
1864
  ##### title?
1861
1865
 
1862
1866
  > `optional` **title**: `string`
1863
1867
 
1864
1868
  点击失效卡要跳转的页面 title
1865
1869
 
1870
+ ##### url?
1871
+
1872
+ > `optional` **url**: `string`
1873
+
1874
+ 点击失效卡要跳转的页面 url 或 sslocal schema
1875
+
1866
1876
  ##### widgetInstanceId
1867
1877
 
1868
1878
  > **widgetInstanceId**: `string`
@@ -10,6 +10,7 @@
10
10
  | --- | --- |
11
11
  | [startDeviceMotionListening](#startdevicemotionlistening) | 开始监听设备方向变化。<br><br>需配对调用 stopDeviceMotionListening。 |
12
12
  | [stopDeviceMotionListening](#stopdevicemotionlistening) | 停止监听设备方向变化。 |
13
+ | [onDeviceMotionChange](#ondevicemotionchange) | 监听设备方向变化事件。<br><br>返回取消监听函数。 |
13
14
 
14
15
  ## API 详情
15
16
 
@@ -47,6 +48,39 @@
47
48
 
48
49
  `Promise`\<`object`\>
49
50
 
51
+ <a id="ondevicemotionchange"></a>
52
+ ### onDeviceMotionChange()
53
+
54
+ > **onDeviceMotionChange**(`handler`): () => `void`
55
+
56
+ 监听设备方向变化事件。
57
+
58
+ #### Parameters
59
+
60
+ • **handler**
61
+
62
+ #### Returns
63
+
64
+ `Function`
65
+
66
+ 返回取消当前监听函数的函数。
67
+
68
+ ##### Returns
69
+
70
+ `void`
71
+
72
+ #### Example
73
+
74
+ ```ts
75
+ import { onDeviceMotionChange } from '@doubao-apps/framework/api';
76
+
77
+ const off = onDeviceMotionChange(({ alpha, beta, gamma }) => {
78
+ console.log(alpha, beta, gamma);
79
+ });
80
+
81
+ off();
82
+ ```
83
+
50
84
  ## 相关类型
51
85
 
52
86
  <a id="startdevicemotionlisteningparams"></a>
@@ -15,7 +15,7 @@
15
15
  | 设备 / 加速度计 | 加速度计监听能力。 | 3 | [查看](./07-设备-加速度计.md) |
16
16
  | 设备 / iBeacon | iBeacon 搜索和结果读取能力。 | 3 | [查看](./08-设备-ibeacon.md) |
17
17
  | 设备 / 罗盘 | 罗盘监听能力。 | 3 | [查看](./09-设备-罗盘.md) |
18
- | 设备 / 设备方向 | 设备方向监听能力。 | 2 | [查看](./10-设备-设备方向.md) |
18
+ | 设备 / 设备方向 | 设备方向监听能力。 | 3 | [查看](./10-设备-设备方向.md) |
19
19
  | 设备 / 陀螺仪 | 陀螺仪监听能力。 | 3 | [查看](./11-设备-陀螺仪.md) |
20
20
  | UI / 输入 | 键盘和输入框选区能力。 | 1 | [查看](./12-ui-输入.md) |
21
21
  | 设备 / 网络 | 网络类型和本机局域网 IP。 | 3 | [查看](./13-设备-网络.md) |
@@ -450,7 +450,7 @@ closePage();
450
450
  ```ts
451
451
  expiredWidget({
452
452
  widgetInstanceId: 'instance_123',
453
- schema: '${pageId}?key=value'
453
+ url: '${pageId}?key=value'
454
454
  });
455
455
  ```
456
456
 
@@ -1537,6 +1537,40 @@ off();
1537
1537
 
1538
1538
  ***
1539
1539
 
1540
+ ### onDeviceMotionChange()
1541
+
1542
+ > **onDeviceMotionChange**(`handler`): () => `void`
1543
+
1544
+ 监听设备方向变化事件。
1545
+
1546
+ #### Parameters
1547
+
1548
+ • **handler**
1549
+
1550
+ #### Returns
1551
+
1552
+ `Function`
1553
+
1554
+ 返回取消当前监听函数的函数。
1555
+
1556
+ ##### Returns
1557
+
1558
+ `void`
1559
+
1560
+ #### Example
1561
+
1562
+ ```ts
1563
+ import { onDeviceMotionChange } from '@doubao-apps/framework/api';
1564
+
1565
+ const off = onDeviceMotionChange(({ alpha, beta, gamma }) => {
1566
+ console.log(alpha, beta, gamma);
1567
+ });
1568
+
1569
+ off();
1570
+ ```
1571
+
1572
+ ***
1573
+
1540
1574
  ### onGyroscopeChange()
1541
1575
 
1542
1576
  > **onGyroscopeChange**(`handler`): () => `void`
@@ -3841,6 +3875,35 @@ Wi-Fi SSID。
3841
3875
 
3842
3876
  ***
3843
3877
 
3878
+ ### DeviceMotionChangeEvent
3879
+
3880
+ 设备方向变化事件。
3881
+
3882
+ #### Properties
3883
+
3884
+ ##### alpha
3885
+
3886
+ > **alpha**: `number`
3887
+
3888
+ 当手机坐标 X/Y 和地球坐标 X/Y 重合时,绕 Z 轴转动的夹角。
3889
+ 范围为 [0, 2π),逆时针转动为正。
3890
+
3891
+ ##### beta
3892
+
3893
+ > **beta**: `number`
3894
+
3895
+ 当手机坐标 Y/Z 和地球坐标 Y/Z 重合时,绕 X 轴转动的夹角。
3896
+ 范围为 [-π, π)。
3897
+
3898
+ ##### gamma
3899
+
3900
+ > **gamma**: `number`
3901
+
3902
+ 当手机坐标 X/Z 和地球坐标 X/Z 重合时,绕 Y 轴转动的夹角。
3903
+ 范围为 [-π/2, π/2)。
3904
+
3905
+ ***
3906
+
3844
3907
  ### DispatchActionDirectiveParams
3845
3908
 
3846
3909
  下发动作指令的请求参数。
@@ -3945,18 +4008,28 @@ mcp入参,如果expectedAction里预期要调用工具,需要在这里写明
3945
4008
 
3946
4009
  点击失效卡要跳转的页面 detailText
3947
4010
 
3948
- ##### schema?
4011
+ ##### ~~schema?~~
3949
4012
 
3950
4013
  > `optional` **schema**: `string`
3951
4014
 
3952
4015
  点击失效卡要跳转的页面 schema,格式与 navigateTo 的 url 相同
3953
4016
 
4017
+ ###### Deprecated
4018
+
4019
+ 使用 url 字段替代 schema 字段,后续版本将移除 schema 字段,请尽快迁移到 url 字段
4020
+
3954
4021
  ##### title?
3955
4022
 
3956
4023
  > `optional` **title**: `string`
3957
4024
 
3958
4025
  点击失效卡要跳转的页面 title
3959
4026
 
4027
+ ##### url?
4028
+
4029
+ > `optional` **url**: `string`
4030
+
4031
+ 点击失效卡要跳转的页面 url 或 sslocal schema
4032
+
3960
4033
  ##### widgetInstanceId
3961
4034
 
3962
4035
  > **widgetInstanceId**: `string`
@@ -6305,6 +6378,22 @@ iBeacon 距离等级。
6305
6378
 
6306
6379
  ***
6307
6380
 
6381
+ ### DeviceMotionChangeListener()
6382
+
6383
+ > **DeviceMotionChangeListener**: (`event`) => `void`
6384
+
6385
+ 设备方向变化事件监听函数。
6386
+
6387
+ #### Parameters
6388
+
6389
+ • **event**: [`DeviceMotionChangeEvent`](doubao-apps-sdk-open-api.md#devicemotionchangeevent)
6390
+
6391
+ #### Returns
6392
+
6393
+ `void`
6394
+
6395
+ ***
6396
+
6308
6397
  ### DeviceOrientation
6309
6398
 
6310
6399
  > **DeviceOrientation**: `"portrait"` \| `"landscape"`
@@ -22,29 +22,105 @@ npm install @doubao-apps/framework
22
22
 
23
23
  ### 组件开发
24
24
 
25
- #### ✅ 定义完整的 aiMeta
26
- ```tsx
25
+ #### ✅ app.config.ts 配置 App 元信息
26
+ ```ts
27
+ import { defineAppConfig } from '@doubao-apps/kit';
28
+
29
+ export default defineAppConfig({
30
+ appId: 'com.example.my-doubao-app',
31
+ name: '我的豆包应用'
32
+ });
33
+ ```
34
+
35
+ #### ✅ 需要稳定首页时在 app.config.ts 明确入口
36
+ ```ts
37
+ // ✅ pages 数组第一项会作为首页(appletEntry)
38
+ import { defineAppConfig } from '@doubao-apps/kit';
39
+
40
+ export default defineAppConfig({
41
+ appId: 'com.example.my-doubao-app',
42
+ name: '我的豆包应用',
43
+ pages: [
44
+ {
45
+ entry: 'pages/home/index',
46
+ id: 'home',
47
+ title: '首页',
48
+ description: '应用默认打开的页面'
49
+ }
50
+ ]
51
+ });
52
+ ```
53
+
54
+ 一级页面目录不写进 `pages` 也会自动发现;如果首页不是历史默认的 `index`,或需要固定首页顺序,建议显式配置 `pages`
55
+ 数组第一项。
56
+
57
+ #### ✅ 需要补充展示信息时在 app.config.ts 定义 metadata
58
+ ```ts
27
59
  // ✅ 好的做法
28
- export default definePage({
29
- aiMeta: {
30
- id: 'user-profile',
31
- title: '用户资料',
32
- description: '展示和编辑用户个人资料'
33
- },
34
- // ...
60
+ import { defineAppConfig } from '@doubao-apps/kit';
61
+
62
+ export default defineAppConfig({
63
+ appId: 'com.example.my-doubao-app',
64
+ name: '我的豆包应用',
65
+ pages: [
66
+ {
67
+ entry: 'pages/user-profile/index',
68
+ id: 'user-profile',
69
+ title: '用户资料',
70
+ description: '展示和编辑用户个人资料'
71
+ }
72
+ ]
35
73
  });
36
74
  ```
37
75
 
38
- ```tsx
39
- // ❌ 不好的做法
40
- export default definePage({
41
- aiMeta: {
42
- id: 'page1' // 缺少 title、description 等信息
43
- },
44
- // ...
76
+ ```ts
77
+ // ❌ 不好的做法:缺少 title、description 等信息
78
+ import { defineAppConfig } from '@doubao-apps/kit';
79
+
80
+ export default defineAppConfig({
81
+ appId: 'com.example.my-doubao-app',
82
+ name: '我的豆包应用',
83
+ pages: [
84
+ {
85
+ entry: 'pages/user-profile/index',
86
+ id: 'page1'
87
+ }
88
+ ]
89
+ });
90
+ ```
91
+
92
+ #### ✅ 多级目录必须显式声明 entry
93
+ ```ts
94
+ // src/pages/account/demo/index.tsx
95
+ // src/widgets/order/detail/index.tsx
96
+ import { defineAppConfig } from '@doubao-apps/kit';
97
+
98
+ export default defineAppConfig({
99
+ appId: 'com.example.my-doubao-app',
100
+ name: '我的豆包应用',
101
+ pages: [
102
+ // 只声明入口、不补 metadata 时,可以直接写字符串
103
+ 'pages/account/demo/index',
104
+ {
105
+ entry: 'pages/account/settings/index',
106
+ id: 'account-settings',
107
+ title: '账号设置页'
108
+ }
109
+ ],
110
+ widgets: [
111
+ 'widgets/order/detail/index',
112
+ {
113
+ entry: 'widgets/order/summary/index',
114
+ id: 'order-summary',
115
+ name: '订单摘要卡片'
116
+ }
117
+ ]
45
118
  });
46
119
  ```
47
120
 
121
+ 如果不配置 `id`,默认取入口最后一级目录名:`pages/account/demo/index` 默认为 `demo`,`widgets/order/detail/index`
122
+ 默认为 `detail`。
123
+
48
124
  #### ✅ 分离样式文件
49
125
  ```tsx
50
126
  // ✅ 好的做法
@@ -88,8 +164,8 @@ interface UserInfo {
88
164
 
89
165
  export default defineWidget({
90
166
  render() {
91
- const input = getViewData<UserInfo>();
92
- return <view>{input.name}</view>;
167
+ const viewData = getViewData<UserInfo>();
168
+ return <view>{viewData.name}</view>;
93
169
  }
94
170
  });
95
171
  ```
@@ -99,13 +175,16 @@ export default defineWidget({
99
175
  import { defineAppConfig } from '@doubao-apps/kit';
100
176
 
101
177
  export default defineAppConfig({
102
- widgets: {
103
- 'widgets/user-card': {
178
+ appId: 'com.example.my-doubao-app',
179
+ name: '我的豆包应用',
180
+ widgets: [
181
+ {
182
+ entry: 'widgets/user-card/index',
104
183
  id: 'user-card',
105
184
  name: '用户卡片',
106
185
  description: '用户信息卡片'
107
186
  }
108
- }
187
+ ]
109
188
  });
110
189
  ```
111
190
 
@@ -113,8 +192,8 @@ export default defineAppConfig({
113
192
  // ❌ 不好的做法
114
193
  export default defineWidget({
115
194
  render() {
116
- const input = getViewData<any>(); // 使用 any 类型,失去类型检查
117
- return <view>{input.name}</view>;
195
+ const viewData = getViewData<any>(); // 使用 any 类型,失去类型检查
196
+ return <view>{viewData.name}</view>;
118
197
  }
119
198
  });
120
199
  ```
@@ -123,8 +202,6 @@ export default defineWidget({
123
202
  ```tsx
124
203
  // ✅ 好的做法
125
204
  export default definePage({
126
- aiMeta: { /* ... */ },
127
-
128
205
  onShow() {
129
206
  console.log('Page shown');
130
207
  },
@@ -149,15 +226,15 @@ export default definePage({
149
226
  // ✅ 好的做法
150
227
  export default defineWidget({
151
228
  render() {
152
- const input = getViewData<{ items: string[] }>();
229
+ const viewData = getViewData<{ items: string[] }>();
153
230
  // 处理空数据
154
- if (!input.items || input.items.length === 0) {
231
+ if (!viewData.items || viewData.items.length === 0) {
155
232
  return <view>暂无数据</view>;
156
233
  }
157
234
 
158
235
  return (
159
236
  <view>
160
- {input.items.map((item, index) => (
237
+ {viewData.items.map((item, index) => (
161
238
  <view key={index}>{item}</view>
162
239
  ))}
163
240
  </view>
@@ -170,11 +247,11 @@ export default defineWidget({
170
247
  // ❌ 不好的做法
171
248
  export default defineWidget({
172
249
  render() {
173
- const input = getViewData<any>();
174
- // 没有检查 input.items 是否存在
250
+ const viewData = getViewData<any>();
251
+ // 没有检查 viewData.items 是否存在
175
252
  return (
176
253
  <view>
177
- {input.items.map(item => <view>{item}</view>)}
254
+ {viewData.items.map(item => <view>{item}</view>)}
178
255
  </view>
179
256
  );
180
257
  }
@@ -321,24 +398,24 @@ export default definePage({
321
398
  // ❌ 错误
322
399
  export default defineWidget({
323
400
  render() {
324
- const input = getViewData<any>();
401
+ const viewData = getViewData<any>();
325
402
  // @ts-ignore
326
- return <view>{input.unknownProperty}</view>;
403
+ return <view>{viewData.unknownProperty}</view>;
327
404
  }
328
405
  });
329
406
  ```
330
407
 
331
408
  ```tsx
332
409
  // ✅ 正确
333
- interface Input {
410
+ interface UserInfo {
334
411
  name: string;
335
412
  age: number;
336
413
  }
337
414
 
338
415
  export default defineWidget({
339
416
  render() {
340
- const input = getViewData<Input>();
341
- return <view>{input.name}</view>;
417
+ const viewData = getViewData<UserInfo>();
418
+ return <view>{viewData.name}</view>;
342
419
  }
343
420
  });
344
421
  ```
@@ -6,10 +6,10 @@
6
6
  "build": "doubao build"
7
7
  },
8
8
  "dependencies": {
9
- "@doubao-apps/framework": "^0.0.28"
9
+ "@doubao-apps/framework": "^0.0.29"
10
10
  },
11
11
  "devDependencies": {
12
- "@doubao-apps/kit": "^0.0.28",
12
+ "@doubao-apps/kit": "^0.0.29",
13
13
  "typescript": "5.5.3"
14
14
  },
15
15
  "version": "0.0.16"
@@ -412,7 +412,8 @@ function relaunchHome() {
412
412
  }
413
413
  ```
414
414
 
415
- 这里的 `url` 直接使用目标页面的 `pageId`,与页面的 `aiMeta.id` 一致;如需传参,可继续拼接 query string。
415
+ 这里的 `url` 直接使用目标页面的 `pageId`。显式配置时取 `src/app.config.ts` 中对应 page 的 `id`;不配置时取入口目录名,例如
416
+ `src/pages/detail/index.tsx` 默认为 `detail`。如需传参,可继续拼接 query string。
416
417
 
417
418
  ### 2. 页面间传参
418
419
 
@@ -441,20 +442,16 @@ function navigateWithParams() {
441
442
  // 接收方 (detail-page)
442
443
  import { getViewData } from '@doubao-apps/framework';
443
444
 
444
- interface DetailPageInput {
445
+ interface DetailPageData {
445
446
  id: string;
446
447
  name: string;
447
448
  price: number;
448
449
  }
449
450
 
450
451
  export default definePage({
451
- aiMeta: {
452
- id: 'detail-page',
453
- title: '详情页'
454
- },
455
452
  render() {
456
453
  // getViewData() 直接返回传入页面的最终对象
457
- const { id, name, price } = getViewData<DetailPageInput>();
454
+ const { id, name, price } = getViewData<DetailPageData>();
458
455
 
459
456
  return (
460
457
  <view>
@@ -497,10 +494,6 @@ function goBackTwoPages() {
497
494
 
498
495
  ```tsx
499
496
  export default definePage({
500
- aiMeta: {
501
- id: 'my-page',
502
- title: '我的页面'
503
- },
504
497
  onShow() {
505
498
  // 页面显示时调用(包括从其他页面返回)
506
499
  console.log('页面显示');
@@ -536,10 +529,6 @@ function openGridPage() {
536
529
 
537
530
  // 九宫格页面定义
538
531
  export default definePage({
539
- aiMeta: {
540
- id: 'app-grid',
541
- title: '应用中心'
542
- },
543
532
  render() {
544
533
  const apps = [
545
534
  { id: 'app1', name: '应用1', icon: '🎯' },