提交 08ab8032 编写于 作者: W wanganxp

x

上级 db76bdce
......@@ -21,6 +21,7 @@ dialogPage和主page的区别:
- dialogPage的背景固定为透明、大小为铺满应用。蒙层由页面内部实现,蒙层颜色、是否响应点击,均由页面内部处理。如果是模态,蒙层不应该允许点击;非模态,则点击蒙层应关闭dialogPage
- dialogPage不使用uni.navigatorTo等路由API,而是单独提供了`openDialogPage``closeDialogPage`
- dialogPage不影响页面栈和路由地址,在getCurrentPages里不能直接得到dialogPage(需在UniPage对象通过getDialogPages获取)
- 因为dialogPage不进入主页面栈,那么`uni.getElementById`是无法获取到dialogPage内的元素的。因为uni这个全局API是获取栈顶元素。如果想获取指定页面的元素,需获取到指定页面的UniPage对象,在这个对象上使用.getElementById方法。如果想获取当前dialogPage页面的元素,应该使用`this.$page.getElementById()`
- dialogPage在Android上并不是一个activity,而是一个全屏view,它和主page所属同一个activity。
- dialogPage不响应iOS侧滑返回,即disableSwipeBack默认值为true。响应Android的back键和back手势,可通过dialogPage onBackPress生命周期控制是否阻止Android的back键和back手势关闭dialogPage。
- dialogPage默认不影响调用页面或其parentPage的show、hide生命周期。如需影响,比如弹出全屏界面时,需手动设置triggerParentHide
......
......@@ -6,6 +6,10 @@ HBuilderX 4.31+,强化了页面对象,新增了UniPage对象。getCurrentPag
UniPage对象强化了开发者对页面的管理功能,并且支持在uts插件中使用。
`getCurrentPages()`获取的是主页面栈,不能直接获取[dialogPage](./dialog-page.md)页面。拿到主页面UniPage对象后,可以再通过getDialogPages()方法获取这个主页面的子弹窗页面栈。
通过`this.$page`,是另一种快速获取当前页面对象的方式。它得到的不是一个页面数组,而是一个具体的当前页面。并且这种方式支持主页面,也支持dialogPage。
<!-- UTSAPIJSON.getCurrentPages.compatibility -->
<!-- UTSAPIJSON.getCurrentPages.param -->
......
......@@ -10,8 +10,9 @@ uni是全局api,本方法获取的元素,是页面栈栈顶(不包括 dial
如需寻找特定页面上的Element,应使用[UniPage对象的getElementById方法](../api/get-current-pages.md#getelementbyid)
如果不确定当前页面是不是在页面栈顶,则推荐使用ref方式,`this.$refs`可以和当前代码调用的页面绑定。\
与页面绑定的获取元素的方式是`this.$refs`获取的对象再进一步as为element。[详见](../tutorial/idref.md#ref方式)
而获取当前页面对象的方法,则是`this.$page`,这个方式可以获取到dialogPage页面,那么通用的、在当前页面获取UniElement的方式是:`this.$page.getElementById`
另一种与页面绑定的获取元素的方式是`this.$refs`获取的组件对象再进一步as为element。[详见](../tutorial/idref.md#ref方式)
<!-- UTSAPIJSON.getElementById.param -->
......
......@@ -282,7 +282,7 @@ uvue页面放置好上述5个UniElement后,在页面的登录按钮点击事
登录成功后通过`uni.navigateBack()``uni.closeDialogPage()`等方式关闭授权页。
hello uni-app x里有完整的自定义登录的示例代码,该示例中:
1. 首先在[预登陆页面](https://gitcode.net/dcloud/hello-uni-app-x/-/blob/alpha/pages/API/get-univerify-manager/get-univerify-manager.uvue)获取运营商返回的4项内容。点击自定义一键登陆后弹出dialogPage,并通过页面地址传参方式,将4项内容传给自定义登录页面。
1. 首先在[预登陆页面](https://gitcode.net/dcloud/hello-uni-app-x/-/blob/alpha/pages/API/get-univerify-manager/get-univerify-manager.uvue)获取运营商返回的4项内容。点击自定义一键登陆后弹出[dialogPage](./dialog-page.md),并通过页面地址传参方式,将4项内容传给自定义登录页面。实际开发中,你可以使用dialogPage,也可以使用一个普通页面。
2.[自定义一键登陆页面](https://gitcode.net/dcloud/hello-uni-app-x/-/blob/alpha/pages/API/get-univerify-manager/univerify-custom-page.uvue),按规范放置合适的UniElement,点击登录后调用`customLogin`方法。登录成功后调用`uni.closeDialogPage()`关闭。
## Tips
......
......@@ -83,9 +83,10 @@ uni-app x提供了[uni.getElementById](../api/get-element.md)等多种方法获
通用的元素操作方法,比如getAttribute、setStyle,在Element上就可以操作。
获取Element有很多方法,全局方法[uni.getElementById](../api/get-element.md)[UniPage的getElementById](../api/get-current-pages.md#getelementbyid)
还可以通过this.refs获取到vue实例然后as为Element。[见下](#ref方式)
获取Element有很多方法,
1. [uni.getElementById](../api/get-element.md)获取栈顶页面的元素(注意无法获取dialogPage页面的元素)
2. [UniPage的getElementById](../api/get-current-pages.md#getelementbyid)获取指定页面的元素。通过`this.$page.getElementById`可以获取当前页面的元素。
3. 还可以通过this.refs获取到vue实例然后as为Element。[见下](#ref方式)
UniVideoElement 继承自 UniElement,拥有video专用的一批方法。
......
......@@ -384,3 +384,44 @@ let a:number = 1 //行尾可以不加分号
let b:boolean = false; //行尾可以加分号
let c:number = 3 ; let d:number = 4 // 同行多语句需要用分号分割
```
## 设计思路@design
uts这门语言不是为了发明中国自己的语言而诞生的,它是为了寻找跨平台开发的最佳方案。
跨平台有几种做法:
1. 利用一种各平台都支持的语言,比如js。之前的uni-app就是这么做的。
2. 把A平台的语言翻译成B、C、D平台的语言。比如kotlin编译为js。
3. 重新设计一门与各平台无关的语言,独立的规范,较重的运行时。比如dart。还有跨windows、mac、linux的java,也是这种思路。
A翻译B、C、D其实是一条不归路。因为这些语言设计之初就是为了服务它自己的平台,所以A、B、C、D有很多无法兼容的设计,没办法顺畅翻译。想走这条路的产品也大多被扔进了垃圾桶。
**所以如果开发者期待uts完全兼容ts,那就期待错了。ts直接翻译为kotlin、swift是不现实的**
而全新语言,又会有几个问题:
1. 较重的运行时,会增大发行包体积、增加内存消耗、减缓运行性能。
2. 新语言与系统原生语言需要通信,通信耗时会造成性能损失。详见[评测](../select.md)
而uts的设计,不是上述3种方案中的某个,也完美的规避了上述3个方案的缺点。
uts是全面了解ts、kotlin、swift、arkts等不同的语言后,全新设计的一套跨平台语言。
它抽象了各个平台语言的共性,保证了跨平台的兼容,比如uts设计了number类型,并且通过编译+运行时的综合方案,在全平台实现了number。
同时uts又支持各平台原生语言的所有特性,比如kotlin的int,只不过这些特性的写法需要写条件编译,因为它们无法跨平台。
由于编译为平台原生语言,所以uts天生没有跨语言通信成本,也不需要新语言较重的运行时,对包体积、内存占用、运行性能的影响非常小。
所以uts被称为最佳的跨平台解决方案。
但不容易兼得的是用户的历史习惯,uts在努力照顾ts开发者的习惯,尽可能贴近ts。
- 只有在编译到浏览器或小程序等js环境时,开发者才能完全使用所有ts特性
- 编译为kotlin和swift时,开发者需要做好准备,学习uts的跨平台约束
## 其他FAQ
- Q:使用uts,万一uts编译器有bug、干坏事,怎么办?
1. uts发展已经2年了,已经有上千个项目和插件上线,语言虽然还需要继续完善,但本身不存在影响项目发布的bug。
2. uts编译后的kt、swift代码,都在uni-app x项目的unpackage目录下,开发者都可以看到,可以放心使用。
- Q:uts不如js好用
1. 我们承认js的灵活和易用在所有编程语言里名列前茅。如果你认为基于js的uni-app已经能满足你的跨平台需求那也很好。如果你追求原生的性能体验,那么选择uts虽然需要一定的学习和适应成本,但我们相信这个成本比任何其他方案都低。
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册