# vue2 **Repository Path**: voyagerlemon/vue2 ## Basic Information - **Project Name**: vue2 - **Description**: vue2相关知识点 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-09-04 - **Last Updated**: 2022-09-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 脚手架文件结构 ├── node_modules ├── public │ ├── favicon.ico: 页签图标 │ └── index.html: 主页面 ├── src │ ├── assets: 存放静态资源 │ │ └── logo.png │ │── component: 存放组件 │ │ └── HelloWorld.vue │ │── App.vue: 汇总所有组件 │ │── main.js: 入口文件 ├── .gitignore: git版本管制忽略的配置 ├── babel.config.js: babel的配置文件 ├── package.json: 应用包配置文件 ├── README.md: 应用描述文件 ├── package-lock.json:包版本控制文件 ## 关于不同版本的Vue 1. vue.js与vue.runtime.xxx.js的区别: 1. vue.js是完整版的Vue,包含:核心功能 + 模板解析器。 2. vue.runtime.xxx.js是运行版的Vue,只包含:核心功能;没有模板解析器。 2. 因为vue.runtime.xxx.js没有模板解析器,所以不能使用template这个配置项,需要使用render函数接收到的createElement函数去指定具体内容。 ### 什么是 vue 1. 构建用户界面 - 用 vue 往 html 页面中填充数据,非常的方便 2. 框架 - 框架是一套现成的解决方案,程序员只能遵守框架的规范,去编写自己的业务功能! - 要学习 vue,就是在学习 vue 框架中规定的用法! - vue 的指令、组件(是对 UI 结构的复用)、路由、Vuex、vue 组件库! ### vue特性 1. 数据驱动视图 vue会监听数据的变化,从而自动重新渲染页面的结构。 好处:当页面结构发生变化时,页面会自动重新渲染; 注意:数据驱动视图是单向数据绑定。 1. 双向数据绑定 在网页中,form表单负责采集数据,Ajax负责提交数据。 - js数据的变化,会被自动渲染到页面上; - 页面上表单采集的数据发生变化的时候,会被vue自动获取到,并更新到js数据中。 MVVM是vue实现数据驱动视图和双向数据绑定的核心原理,MVVM指的是Model、View和ViewModel,它把 每个HTML页面拆分成了这三个部分。 Model表示页面渲染时所依赖的数据源;View表示当前页面所渲染的DOM结构;ViewModel表示vue实例, 是MVVM的核心。 ViewModel 作为 MVVM 的核心,是它把当前页面的数据源(Model)和页面的结构(View)连接在了一起。 当数据源发生变化时,会被 ViewModel 监听到,VM 会根据最新的数据源自动更新页面的结构 当表单元素的值发生变化时,也会被 VM 监听到,VM 会把变化过后最新的值自动同步到 Model 数据源中 ### vue 指令 指令(Directives)是vue为开发者提供的模板语法,用于辅助开发者渲染页面的基本结构。 #### 1. 内容渲染指令 内容渲染指令用来辅助开发者渲染 DOM 元素的文本内容。常用的内容渲染指令有如下 3 个: 1. `v-text` 指令的缺点:会覆盖元素内部原有的内容! 2. `{{ }}` 插值表达式:在实际开发中用的最多,只是内容的占位符,不会覆盖原有的内容! 3. `v-html` 指令的作用:可以把带有HTML标签的字符串,渲染成真正的 HTML 内容! #### 2. 属性绑定指令 > 注意:插值表达式只能用在元素的**内容节点**中,不能用在元素的**属性节点**中! - 在 vue 中,可以使用 `v-bind:` 指令,为元素的属性动态绑定值; - 简写是英文的 `:` - 在使用 v-bind 属性绑定期间,如果绑定内容需要进行动态拼接,则字符串(如:box)的外面应该包裹单引号,例如: ```xml
被 v-if 控制的元素
``` 2. 给 v-if 提供一个判断条件,根据判断的结果是 true 或 false,来控制元素的显示和隐藏 ```js良好
``` 3. v-else * `v-else` 元素必须紧跟在带 `v-if` 或者 `v-else-if` 的元素的后面,否则它将不会被识别。 ```js较差
``` 4. v-else-if * `v-else-if`,顾名思义,充当 `v-if` 的“else-if 块”,可以连续使用,类似于 `v-else`,`v-else-if` 也必须紧跟在带 `v-if` 或者 `v-else-if` 的元素之后。 ```jsmessage的值是: {{ message | capitalize}}
``` 过滤器可以串联地进行调用,把message的值交给capitalize进行处理,再把capitalize处理的结果交给capitalize2进行处理,最终把capitalize2处理的结果,作为最终值渲染到页面上 ```js {{ message | capitalize | capitalize2 } ``` 过滤器的本质是 JavaScript 函数,因此可以接收参数。 ```jsmessage的值是: {{ message | capitalize(arg1, arg2)}}
// msg的形参一定要是“管道符”前面的值,永远占第一位 Vue.filter("capitalize", (msg, arg1, arg2) => { // 过滤器的代码逻辑 }); ``` * 声明过滤器 * 私有过滤器 在 filters 节点下定义的过滤器,称为“私有过滤器”,因为它只能在当前 vm 实例所控制的 el 区域内使用。 ```js // 过滤器函数必须被定义到filters节点之下,与data、methods等平级 // 过滤器本质上是函数 filters: { // 过滤器函数形参中的val永远都是“管道符”前面的值 capitalize(val) { // 字符串有charAt方法,接收索引值,表示从字符串中把索引对应的字符获取出来 const first = val.charAt(0).toUpperCase(); // 字符串的slice方法可以截取字符串,从指定索引往后截取 const other = val.slice(1); // 过滤器中一定要有一个返回值 return first + other; } } ``` * 全局过滤器 如果希望在多个 vue 实例之间共享过滤器,则可以按照如下的格式定义全局过滤器。 ```js // 使用Vue.filter()定义全局过滤器,str是“管道符”前面的值 // 可以写成普通函数,也可以写成箭头函数 Vue.filter("capitalize", (str) => { const first = str.charAt(0).toUpperCase(); const other = str.slice(1); return first + other; }); ``` 格式化时间: ```js Vue.filter('dateFormat', function (time) { // 1. 对 time 进行格式化处理,得到 YYYY-MM-DD HH:mm:ss // 2. 把 格式化的结果,return 出去 // 使用了dayjs库 // 直接调用 dayjs() 得到的是当前时间 // dayjs(给定的日期时间参数) 得到指定的日期 const dtStr = dayjs(time).format('YYYY-MM-DD HH:mm:ss') return dtStr }) ``` > 注意:如果全局过滤器和私有过滤器名字一致,此时按照“**就近原则**”,调用的是”私有过滤器“ ### watch侦听器 #### 1. 什么是侦听器 watch 侦听器允许开发者监视数据的变化,从而针对数据的变化做出特定的操作。 ## 脚手架文件结构 ``` ├── node_modules ├── public │ ├── favicon.ico: 页签图标 │ └── index.html: 主页面 ├── src │ ├── assets: 存放静态资源 │ │ └── logo.png │ │── component: 存放组件 │ │ └── HelloWorld.vue │ │── App.vue: 汇总所有组件 │ │── main.js: 入口文件 ├── .gitignore: git版本管制忽略的配置 ├── babel.config.js: babel的配置文件 ├── package.json: 应用包配置文件 ├── README.md: 应用描述文件 ├── package-lock.json:包版本控制文件 ``` ## 关于不同版本的Vue 1. vue.js与vue.runtime.xxx.js的区别: 1. vue.js是完整版的Vue,包含:核心功能 + 模板解析器。 2. vue.runtime.xxx.js是运行版的Vue,只包含:核心功能;没有模板解析器。 2. 因为vue.runtime.xxx.js没有模板解析器,所以不能使用template这个配置项,需要使用render函数接收到的createElement函数去指定具体内容。 ## vue.config.js配置文件 1. 使用vue inspect > output.js可以查看到Vue脚手架的默认配置。 2. 使用vue.config.js可以对脚手架进行个性化定制,详情见:https://cli.vuejs.org/zh ## ref属性 1. 被用来给元素或子组件注册引用信息(id的替代者) 2. 应用在html标签上获取的是真实DOM元素,应用在组件标签上是组件实例对象(vc) 3. 如果给标签写的是id(=sch)的话,(document.getElementById("sch"))获取到的是组件所对应的完整DOM结构 4. 使用方式: 1. 打标识:```