node.js是一个基于Chrome引擎的JavaScript运行环境,用于在本地运行JavaScript代码
1. 安装
1.1 安装node管理工具nvm
Linux安装
请查看官方下载页面,已提供对应的命令行安装方法,包含docker、nvm等方式
2024/10/7大约 8 分钟
node.js是一个基于Chrome引擎的JavaScript运行环境,用于在本地运行JavaScript代码Linux安装
请查看官方下载页面,已提供对应的命令行安装方法,包含docker、nvm等方式
vue是一个渐进式框架,即允许开发者根据需求选择不同的功能和特性。它基于标准HTML、CSS和JavaScript构建,并提供了一套声明式的、组件化的编程模型,帮助你高效地开发用户界面,并支持多种方式使用
vite开发spa单页面应用js文件在一般html中使用相关功能ssr(Nuxt)优化单页面性能表现Vue的语法非常友好,文档清晰,适合初学者。它提供了模板、指令(如v-if,v-for)等非常直观的功能,开发者可以用传统的HTML风格来描述UI。Vue采用了类似于MVVM(Model-View-ViewModel)模式,使得开发者的关注点更倾向于视图与数据之间的双向绑定,不需要手动管理数据状态变化。Vue是一个比较完整的框架,默认内置了很多功能,比如Vue Router、Vuex(状态管理)、指令等,你几乎可以用它做出一个完整的应用而无需依赖第三方库。这使得Vue更像一个全栈框架。Vue的设计哲学比较灵活,但也提供了一些约定,让开发者可以在不需要做过多配置的情况下轻松启动项目。例如,Vue的单文件组件(.vue)结构非常清晰,HTML、CSS和JavaScript被放在同一个文件中,容易管理template中的特殊属性,可以将js变量绑定到元素上,并实现根据数据变化驱动视图的更新
render函数,运行时执行render函数生成虚拟DOM,并通过patch将差异同步到真实DOM,挂载到页面上render函数,之后同步差异render函数v-if指令用于条件性地渲染一块内容。这块内容只会在指令的表达式返回真值时才被渲染
可以在之后添加v-else或v-else-if分支,用于在表达式返回假值时渲染内容
v-if如果不为真值时,其中的内容都不会构建,切换时内容会被创建/销毁,v-show相当于只是为样式添加display:none,内容还在,只是不可见
v-if优先级比v-for高,但不建议在同一元素上使用v-if和v-for,此时v-if读取不到v-for中定义的变量
<h1 v-if="a">111</h1>
<h1 v-else-if="b">111</h1>
<h1 v-else>111</h1>
vue-router中,路由导航有两种模式:hash模式和history模式,两种模式原理不同hash模式:路由地址中会带有#,如http://localhost:8080/#/home
#的信息不会发送给服务器,后端服务器不需要对其他的路径进行处理IE9支持hash模式history模式:路由地址中不带有#,如http://localhost:8080/home
history模式需要后端进行配置,才能实现对/home的解析,不然访问会得到404错误SEO优化,因为SEO一般不会抓取hash部分api写法对应的钩子
beforeCreate: 选项式API特有的选项,在实例初始化完成并且props被解析后立即调用,此时数据data和methods等属性还没有被初始化created: 选项式API特有的选项,组件实例处理完所有与状态相关的选项,此时响应式数据、计算属性、方法和侦听器已经初始化,但$el还没有挂载setup:组合式API中替代beforeCreate和created的生命周期钩子,在这里将完成一切初始化工作beforeMount: 组件挂载之前,此时组件的template已经编译成render函数,但还没有挂载mounted: 组件挂载完成,可以访问节点beforeUpdate: 组件更新之前,此时数据已经被更新updated: 组件更新完成,在这里应该避免更新数据,这样可能造成死循环beforeUnmount: 组件销毁之前,vue2中写作beforeDestroyunmounted: 组件销毁完成,vue2中写作destroyedfunction(()=>{}, target?)
target参数为可选参数,用于指定当前组件实例,默认为当前组件实例MVVM: Model-View-ViewModel模型视图模型的缩写,其中Model为数据,即业务逻辑;View为视图,也就是UI界面;ViewModel为数据模型,将视图和模型同步交互,是不需要手动操作dom的一种设计思想Vue很明显是基于MVVM思想的,这使开发者不需要关系数据的响应式更新子组件:在vue中,可以定义.vue文件,每个文件都是一个子组件,方便拆分和复用。一个Vue组件在使用前需要先被"注册",这样Vue才能在渲染模板时找到其对应的实现
全局注册:通过app.component(name, options)注册,让组件在当前Vue应用中全局可用(直接使用<MyComponent />,不需要额外注册)
import { createApp } from 'vue'
import App from './App.vue'
const app = createApp(App)
app.component(
// 注册的名字
'MyComponent',
// 组件的实现
{
/* ... */
}
)
// 可以引入组件,链式调用
import ComponentA from './ComponentA.vue'
import ComponentB from './ComponentB.vue'
import ComponentC from './ComponentC.vue'
app
.component('ComponentA', ComponentA)
.component('ComponentB', ComponentB)
.component('ComponentC', ComponentC)
app.mount('#app')
局部注册:子组件需要在使用它的父组件中显式导入,并且只能在该父组件中使用。它的优点是使组件之间的依赖关系更加明确,并且对tree-shaking更加友好