20240826~20240830

8 阅读3分钟

vue3,父子组件传值,defineModel。

  • 父组件通过v-model传给子组件的值,子组件通过defineModel接收了。子组件修改了值之后,想马上拿这个值,但是并没有拿到最新值,而是拿到了上一次的旧值。
  • 如果不通过defineModel去拿,而是显示地当成props,并且修改时通过update:modelValue去改,那么子组件修改值之后,是可以拿到最新值的。

attrsattrs和slots

  • $attrs可以在子组件中拿到所有不包含在props中,父组件传过来的属性。直接通过v-bind就可以绑定到所需元素上。且默认是会绑定到根节点元素上,前提是只有一个根节点。
  • $slots是一个插槽数组,可以在子组件中拿到父组件传过来的所有插槽。

volta

  • 一个可以替代nvm的工具,优势是如果在项目中指定了配置版本,Volta 会自动切换到该版本。
  • volta是基于rust创建的,而nvm是基于node创建的。前者比后者更快。

CI/CD

  • CI,持续化集成。主要流程是,开发上传代码 -> 持续集成工具(jekins)检测到新的代码提交,触发构建过程 -> 生成应用镜像,推送到镜像仓库(docker)。
  • CD,持续化部署。主要流程是,检测到有新的镜像 -> 启动镜像,生成容器。
  • jekins,持续化构建工具平台,主要用于持续,自动的构建项目。可以手动执行预先设定好的脚本,也可以和git集成,自动触发。
  • 结合我们现在使用的jekins
    • 它是通过手动触发去执行脚本,并没有和git集成,自然无法自动触发构建。
    • 理论上构建脚本中应该每次构建时都npm install,但是由于种种原因,我没有在脚本中加这条命令。而是把本地的node包拷贝到了jekins服务器上。这样弊端很明显,本地安装了新包后,需要复制一份到jekins服务器。当然这样的话,还要配置一下每次重新打包时,不清除工作目录。因为如果清除的话,node包就被删掉了。当然,不用担心不清除工作目录会拉不到最新代码,其实这个原理和我们在本地开发是一样的,本地开发也是每次不重新npm install,直接拉最新代码。

angular+rxjs,公共服务中调用接口请求方法

  • 如果希望在接收到数据后,执行一些操作,或者说每个调用公用服务的地方都有各自的处理逻辑,那么不要直接在公共服务上通过subscribe拿结果。这个公共服务要返回一个流。在调用公用服务的地方再去subscribe就好了。

v3:extend、插件、指令

  • extend:v3中不再支持Vue.extend。可以直接通过jsx定义。
  • 插件:定义全局的功能,比如组件、指令、全局属性、方法。
  • 指令:涉及对底层dom操作时,比较适用。比如一个按钮的不可编辑状态,可以通过指令来实现,这样比在每个组件中定义相同的逻辑要便捷,高效。但是官方不建议在组件上面使用自定义指令。