diff --git a/docs/.vitepress/sibar.js b/docs/.vitepress/sibar.js index 2347489..4850de8 100644 --- a/docs/.vitepress/sibar.js +++ b/docs/.vitepress/sibar.js @@ -129,6 +129,10 @@ export function sidebarUsageFrame() { text: "速记", link: "/usage-frame/小程序/uniapp/速记", }, + { + text: "nvue开发指导", + link: "/usage-frame/小程序/uniapp/nvue开发指导", + }, ], }, ], diff --git "a/docs/usage-frame/\345\260\217\347\250\213\345\272\217/uniapp/nvue\345\274\200\345\217\221\346\214\207\345\257\274.md" "b/docs/usage-frame/\345\260\217\347\250\213\345\272\217/uniapp/nvue\345\274\200\345\217\221\346\214\207\345\257\274.md" new file mode 100644 index 0000000..b03ad79 --- /dev/null +++ "b/docs/usage-frame/\345\260\217\347\250\213\345\272\217/uniapp/nvue\345\274\200\345\217\221\346\214\207\345\257\274.md" @@ -0,0 +1,286 @@ +# nvue开发指导 + +## 官网注意事项 + +### template + +- 只能在`text`标签中设置字体大小、颜色等属性 +- 只支持`v-if`,不支持`v-show` +- `image`标签不支持svg图片 + +### script + +- 不支持`onLoad`钩子,可使用`mounted`钩子 + +### css + +- 只支持`class`选择器 +- 只支持flex布局 +- 只支持`px`,`rpx`,不支持`%`, `rem`, `vw`, `vh` +- 不支持`background-image`,可使用`image`组件和`position`定位代替 +- `fixed`不支持`z-index` +- `:class`, `:style`只支持数组模式 +- 全局样式,应该放在`uni.scss`文件中,或者将样式导入到该文件。这样整个项目都可以用这些样式了 + +### nvue获取组件的节点信息 + +在nvue中,不能使用 uni.createSelectorQuery获取节点信息 + +可使用下面方案进行代替: + +```vue + +``` + +### 与webview事件通信 + +#### 事前准备 + +第一步:点击[DCloud uni-app](https://gitcode.net/dcloud/hello-uni-app-x/-/tree/alpha/hybrid/html),下载`uni.webview.x.x.x.js`文件,放入到与`index.html`同级的目录下 + +第二步:在应用的入口文件(比如index.html)中,加入以下代码: + +```html + + +
+ + + + + + +``` + +第三步:在使用`uni.xxx`功能的代码文件中,关闭eslint功能 + +#### web应用发送给/接收到基座apk的数据 + +第一步:在使用`uni.xxx`功能的代码文件中,关闭eslint功能 + +第二步:`uni.postMessage`方法的参数定义: + +```javascript +/** + * type: {string} 发送数据的目的,比如获取token(getToken) + * type的值: + * getToken + * getAuth + * ...... + * payload:{object} 发送数据附带的其他数据信息 + */ +function uni.postMessage ({ + type: string, + payload: object +}) { + return null +} +``` + +第三步:发送数据 + +**vue3**: + +```vue + + + +``` + +#### 基座apik发送给/接收到web应用的数据 + +```vue + + + +``` + +## 开发注意事项 + +### 项目运行 + +对于某些包,需要使用`npm i xxx`进行安装,所以在第一次运行的时候,需要使用`npm i`进行项目依赖的安装 + +### 连接到模拟器 + +打开模拟器安装目录,找到类似`adb.exe`的文件后,然后运行`adb connect 127.0.0.1:[port]`提示连接成功后,打开【运行】-【运行到手机或模拟器】-【运行到安卓基座】,点击刷新,找到相同的`port`即可 + +### 复杂布局可多使用插槽 + +在复杂的页面布局中,可灵活使用(嵌套的)插槽的形式进行组件的开发。这样数据的传递和获取都变得更加的容易。类似下面: + +```vue + +``` + +### 系统导航栏占位 + +使用`uni-nav-bar`中的`status-bar`组件放在页面/组件顶部即可 + +### u-image图片无法显示 + +使用网络图片,或者使用类似`@/static/xxx.png`的形式,而非相对路径`..`的形式 + +### webview非实际高宽展示 + +出现该问题,应该该路由页面的后缀改为`.nvue`即可,因为`.vue`后缀模式中webview是直接占据全屏的 + +### 在webview上面(z-index)显示其他内容 + +使用position定位属性、`cover-view`元素。若上面内容需全面覆盖webview窗口,则上面内容组件的flex应该设为1 + +### webview在nvue安卓手机无法滚动 + +当页面整体存在滚动条时,内部是滚动条是失效的,所以,要让内部子元素(比如列表、webview)的滚动条生效,则子元素的祖先元素必须不能出现滚动条,即该元素的高度不能超过视口最大高度,否则滚不动 + +### template、block占位元素失效 + +两者互相替换试试,总有一个有效果 + +### 内容无法滚动 + +若想使得内容滚动,需要嵌套一个`scroll-view` + +### 点击事件触发不了 + +view、text赋予点击事件无法触发时,可使用其他第三方组件库的组件进行包裹 + +### 页面元素布局混乱 + +- 检查元素的高宽度是否合适,可将不应该显示的元素高度设为0 +- 设置元素的flex,当为0时,元素的占位是实际的高宽度,当为1时,是剩余宽度/均分剩余宽度 + +## 错误汇总 diff --git "a/docs/usage-frame/\345\260\217\347\250\213\345\272\217/uniapp/\351\200\237\350\256\260.md" "b/docs/usage-frame/\345\260\217\347\250\213\345\272\217/uniapp/\351\200\237\350\256\260.md" index 4f038cf..08e527b 100644 --- "a/docs/usage-frame/\345\260\217\347\250\213\345\272\217/uniapp/\351\200\237\350\256\260.md" +++ "b/docs/usage-frame/\345\260\217\347\250\213\345\272\217/uniapp/\351\200\237\350\256\260.md" @@ -2,6 +2,8 @@ > 注意: > 若内容和实际不符,有可能是文档过时了 +> 注意: +> 若内容和实际不符,有可能是文档过时了 > 最新内容还是得看官方文档 ## 基础速记 @@ -35,7 +37,7 @@ - 使用@dcloudio/uvm自动更新uniapp编译器的主要依赖,使用`npx @dcloudio/uvm@latest`更新到最新正式版,`npx @dcloudio/uvm@latest 3.2.0`更新到指定版本 - 打包时,使用`npm run build:xx`会在`/dist/build/xx`下生成对应的打包资源 - dev和build的区别:dev模式有sourcemap可进行断点调试,process.env.NODE_ENV值为development;build会将代码进行压缩体积更小,同时NODE_ENV值为production -- 跨端注意事项:https://uniapp.dcloud.net.cn/matter.html +- 跨端注意事项: ## can i use @@ -56,6 +58,7 @@ uni.canIUse(${component}.${attribute}.${option}) ## 编译及条件编译 条件编译: + - 注释内容基本都是`#ifdef %platform%`,`#ifndef %platform%`(除该平台之外)开始,尾部注释是`#endif`结束。不同语言对应的注释写法不一样,比如js/json/uts使用`//`,css使用`/* */`,vue/nvue/uvue组件使用`` - platform:VUE3、UNI-APP-X、uniVersion、APP、APP-PLUS、APP-PLUS-NVUE、APP-NVUE、APP-ANDROID、APP-IOS、H5、WEB、MP(小程序)、MP-WEIXIN、MP-QQ、MP-TOUTIAO等 - 使用`||`支持多平台编译,比如`#ifdef plat1 || plat2` @@ -68,6 +71,7 @@ uni.canIUse(${component}.${attribute}.${option}) ``` 注意: + - 保证条件编译前和编译后文件都应当能够通过语法校验 - ios和Android不支持通过条件编译来区分,需要调用`uni.getSystemInfo`获取平台信息 @@ -78,6 +82,7 @@ uni.canIUse(${component}.${attribute}.${option}) 作用:应用的全局配置文件,用于配置页面文件路径pages、窗口样式globalStyle、导航栏globalStyle、tabbar等。类似微信小程序app.json的页面管理 注意: + - topWindow、leftWindow、rightWindow属性用于适配宽屏的(上、左、右栏) ### manifest.json @@ -87,6 +92,7 @@ uni.canIUse(${component}.${attribute}.${option}) ### App.vue/App.uvue 作用: + - 作为应用的入口文件,所有页面都是在该组件下进行切换的; - 本身不是页面,不能编写视图元素,没有`