vue认识关于(过滤器 webpack 指令)

适用人群
A.对vue框架感兴趣 
B.前端在职,提高进一步的需求
C.希望快速入门vue开发的相关人员

前置储备

必备前提:
HTML + CSS +JS
WebAPI
Ajax

可选前提
Node.js

第一天:前端工程化与Webpack
前端工程化的相关概念
Webpack的常见用法
打包发布
Source Map

目标:
了解工程化的前端开发方式

能够指定Webpack在实际开发中所起到的作用


学习目标1 
Webpack的学习目标

理解什么是前端工程化
转变对前端开发的认知

了解Webpack的基本用法
为vue和react的学习做技术储备

不强制要求手动配置Webpack
一定要知道Webpack在项目中有什么作用
清除Webpack中的核心概念


1.理想中的前端开发与实际的前端开发
会写HTTP+CSS+JS
需要美化页面样式,会弄一个bootst
需要操作DOM或发起Ajax请求,会弄jQuery
需要快速实现网页布局效果,会弄Layui

实际的前端开发
模块化(js的模块化、css的模块化、资源的模块化)
组件化(复原现有的UI结果、样式、行为)
规范化(目录结构的划分、编码规范化、接口规范化、文档规范化、Git分支管理)
自动化(自动化构建、自动部署、自动化测试)

2什么是前端工程化

指的是:企业级的前端项目开发中,把前端开发所需的工具 技术 流程 经验等进行规范化
    标准化

企业中的vue和react,都是基于工程化的方式进行开发的

好处:前端开发自成体系,有一套标准的开发方案和流程

3前端工程化的解决方案

早期的前端工程化解决方案
grunt
gulp

目前主流的前端工程化解决方案
webpack
parcel

            webpack的基本使用

1.什么是webpack

概念:webpack是前端项目工程化的具体解决方案

主要功能:它提供了友好的前端模块化开发支持,以及代码压缩混淆、处理器端JS的兼容
      性能优化等强大的功能。


好处:把工作的重新放到具体功能的实现上,提高了前端开发效率和项目的可维护性

注意:目前ver,react等前端项目,基本上都是基于webpack进行工程化开发

通俗:可以把高级代码转成低级代码 

2.创建列表隔行变色项目

新建项目空白目录,并运行 npm init -y命令,初始化包管理配置文件package.json
新建src源代码目录
新建src->index.html首页和src->index.js脚本文件
初始化首页基本的结构
运行npm install jquery -S命令 安装jQuery
通过ES6模块化的方式导入jQuery,实现列表隔行变色效果


npm install jquery -S == npm install jquery --save

-D=--save -dev    

3.项目中安装webpack

在终端运行如下的命令,安装webpack相关的两个包

npm install webpack@5.42.1 webpack-cli@4.7.2 -D

4.在项目中配置webpack

不能只安装不配置

1在项目根目录中,创建名为webpack.config.js的webpack.js配置文件

module.esports ={
  node:'development'用来指定构建模式,可选值有development和production
}

2在package.json的script节点下,新增dev脚本

"script":{
     "dev":"webpack"//script节点下的脚本 可以通过npm run
}

3在终端中运行npm run dev命令 启动webpack进行项目的打包构建

asset main.js 328 KiB [emitted] (name: main)
runtime modules 937 bytes 4 modules
cacheable modules 286 KiB
  ./src/index.js 310 bytes [built] [code generated]
  ./node_modules/jquery/dist/jquery.js 286 KiB [built] [code generated]
webpack 5.79.0 compiled successfully in 234 ms


4.使用porduction和development

porduction
asset main.js 88.3 KiB [compared for emit] [minimized] (name: main) 1 related asset
runtime modules 663 bytes 3 modules
cacheable modules 286 KiB
  ./src/index.js 310 bytes [built] [code generated]
  ./node_modules/jquery/dist/jquery.js 286 KiB [built] [code generated]
webpack 5.79.0 compiled successfully in 1293 ms

porduction的main.js文件会被压缩混淆 打包时间很长 体积小

development的main.js文件 打包时间很短 体积大 

开发的时候追求的是打包的速度
上线的时候才追求体积

4.2 webpack中的默认约定

在webpack4.x和webpack5.x版本中,如下的默认约定

默认的打包入口文件为src->index.js
默认的输出文件路径为dist->main.js

注意:可以在webpack.config.js中修改打包的默认约定

4.3自定义打包的入口与出口

在webpack.config.js配置文件中,通过entry节点指定打包的入口,通过output节点指定打包的出口

__dirname表示所处的根目录

    entry: path.join(__dirname, './src/index.js'),
    // __dirname表示所处的根目录
    // 指定生成的文件要存放放到哪里
    output: {
        // 存放到目录
        path: path.join(__dirname, 'dist'),
        //生成的文件名
        filename: 'bundle.js'
        // 就说默认main名字 变成bundle.js 记得js的路径要变
    }

4.4 webpack插件的使用

通过安装和配置第三方的插件可以拓展webpack的能力 从而让webpack用起来很方便

1 webpack-dev-server

每当修改了源代码 webpack会自动进行项目的打包和构建

运行如下命令

npm install webpack-dev-server@3.11.2 -D


2配置webpack-dev-server

修改->package.json->scripts中的dev命令如下

"scripts":{
    "dev":"webpack serve"
}

2 再次运行npm run dev命令,重新进行项目的时候

3 在浏览器中访问http://localhost:8080地址,查看自动打包效果

如果要停止webpack-dev-server
ctrl + c 连续两次

4.4 安装 html-webpack-plugin

运行如下的命令 即可在下面中安装

npm install html-webpack-plugin@5.3.2 -D


1 通过HTML插件复制到项目目录中的index.html页面 也被放到内存中
2 HTML插件在生成的index.html页面 自动注入了打包的bundle.js文件

4.5 devServer节点

在webpack.config.js配置文件中,可以通过devServer节点对webpack.config.js插件进行配置

    devServer: {
        // 首次打包成功后 自动打开浏览器
        open: true,
        // http协议中 端口是80 则可以省略
        port: 80,
        // 指定运行的主机地址
        host: '127.0.0.1'
    }

注意 凡是修改了webpack.config.js配置文件 或者修改了package.json配置文件
     必须重启实时打包的服务器,否则最新的配置文件无法失效

webpack中的loader

1.loader加载器概述

实际开发中,webpack默认只能打包处理以.js后缀名的模块,其他的模块默认处理不了
需要调用loader加载器才可以正常打包,否则报错

loader加载器的作用:协助webpack打包处理特定的文件模块

css-loader可以打包处理.css相关的文件
js-loader可以打包处理.js相关的文件
html-loader可以打包处理.htl相关的文件

2.loader的调用过程

                        ->是否配置了babel

              ->是否包含了高级js语法
打包的文件模块 ->是否为js            ->webpack进行处理
                        ->loader进行处理
              ->是否配置了对于loader
                        ->报错


3.打包处理css文件

运行npm i style-loader@3.0.0 css-loader@5.2.6 -D

在webpack.config.js的module->rule的数组中 添加数组

    module: {
        rules: [
            // 定义了不同模块对应的loader
            { test: /\.css$/, use: ['style-loader', 'css-loader'] }
        ]
    }

其中test 表示匹配的文件类型 use表示对应要调用的loader

注意:
use数组中指定的loader 顺序是固定的

多个loader的调用顺序是:从后往前调用

4.打包处理less文件

运行npm i less-loader@10.0.1 less-loader@4.1.1 -D    

在webpack.config.js的module->rule的数组中 添加数组

 module: {
        rules: [
            // 处理.less文件的loader
            { test: /\.css$/, use: ['style-loader', 'css-loader', 'less-loader'] },
        ]
    },

5.base64的图片优缺点

base的缺点是内存为变,
优点既获得小图片和他标签也防止没有必要的请求


6.打包处理样式表中与url路径相关的文件

运行npm i url-loader@4.1.1 file-loader@6.2.0 -D命令

在webpack.config.js的module->rule的数组中 添加数组

 

   module: {
        rules: [
            // 处理图片文件的loader
            // 如果需要调用的loader只有一个 则只传递一个
            { test: /\.jjpg|png|gif$/, use: 'url-loader?limit=22229' }
        ]
    },

其中?之后的是loader的参数项

limit用来指定图片的大小,单位是字节

只有<=limit大小的图片,才会被转为base64格式的图片

7. 打包处理js文件中的高级语言

webpack只能打包处理一部分高级语言的js语法 对于哪些webpack无法处理的高级js语法

需要借助于babel-loader 进行打包处理 例如webpack无法处理下面的js代码


7.1 安装babel-loader相关的包

运行如下的命令安装对应的依赖包:

npm i babel-loader@8.2.2 @babel/core@7.14.6 @babel/plugin-proposal-decorators@7.14.5 -D

在webpack.config.js的module->rules数组中 添加loader规则如下

注意: 必须使用exclude 指定排除项:因为node_modules 目录下的第三方插件

{test: /\.js$/}

7.2 配置babel-loader

在项目根目录下 创建名为babel.config.js的配置文件 定义babel的配置项

 // 使用babel-loader处理高级的js语法 只需要自己的代码进行转换即可
            // 一定要排除node_modules目录中的js文件
            // 因为第三方包的js兼容性 不需要关心
            { test: /\.js$/, use: 'babel-loader', exclude: '/node_modules/' }

打包发布

1.配置webpack的打包发布

在package.json文件的scripts节点下 新增build命令

  "scripts": {
    "dev": "webpack serve",
    "build": "webpack --mode production"
  },

--model是一个参数项,用来指导webpack的运行模式 
production代表生产环境 会对打包生成的文件

进行代码压缩和性能优化

注意:
通过--model指定的参数项,会覆盖webpack.config.js中的model选项


2. js文件统一生成js目录中

在webpack.config.js配置文件的output节点中

output: {
        path: path.join(__dirname, 'dist'),
        filename: 'js/bundle.js'
        //两个意思就是放到dist目录下的js文件夹之中
    },

 // 在配置url-loader的时候 多个参数之间使用&&符号进行分割
            { test: /\.jjpg|png|gif$/, use: 'url-loader?limit=22229 && outputPath=images' },


8. 自动清理dist目录下的旧文件

为了每次打包发布时自动清理dist目录中的旧文件 
可以安装配置clean-webpack-plugin


Source Map

1. 什么是Source Map

Source Map就是一个信息文件,里面储存着位置信息
Source Map文件中储存着压缩混淆后的代码 所对应的转换前的位置

有了它 出错的时候 除错工具直接显示原始代码 而不是转换后的代码 能够极大方便的后期调试

2. 默认Source Map的问题

开发环境下默认生成的Source Map,记录的是生成后的代码的位置。
会导致运行时报错的行数与源代码的行数不一致的问题

3.解决默认Source Map的问题

开发环境下,推荐在webpack.config.js中添加如下的配置
即可保证运行时报错的行数与源代码的行数保持一致

module.exports = {
// 开发调试阶段 建议把devtools的值改为eval-source-map
   devtools: 'eval-source-map',
    mode: 'development',//用于构建模式 production和development
    
}

4.webpack生产环境中Source Map

在生产环境中 如果省略devtool,则最终生成的文件不包含source map
这能够防止原始代码通过Source Map形式暴露给另有所图之人

5.只定位行数不暴露

在生产环境中 如果只想定位报错的具体行数 且不想暴露源码
此时可以将devtool的值设置为nosources-source-map

module.exports = {
// // 发布阶段 建议把devtools的值改为nosources-source-map
   devtools: 'nosources-source-map',
    mode: 'development',//用于构建模式 production和development
    
}

注意
采用此选项 你应该将你的 服务器配置为,不允许用户访问source map 文件 

6.Source Map的最佳实践

开发环境下
    建议把devtool的值设置为eval-source-map
    好处:可以精确定位到具体的错误行

生产环境下
    建议关闭Source Map或将devtool的值设置为nosources-source-map
    好处:防止源码泄露 提高网站的安全性

实际开发中需要自己配置webpack嘛

思考:
不需要
实际开发中会使命令行工具(CLI)一键生成带有webpack的项目

开箱即用 所有webpack配置项都是现成的
只需要知道webpack基本概念

                VUE基础入门

vue简介

1.什么是vue
是一套用于构建用户界面的前端框架

构建用户界面<->框架

1.1构建用户界面

往html页面中填充数据,非常的方便

1.2框架

是一套现成的解决方案,程序员只能遵守框架的规范去编程自己的业务能力

要学习vue 就是在学习vue框架中规定的用法

vue的指令 组件(是对UI结构的复用)、路由、Vuex vue组件库

只有把上面罗列的内容掌握,才有开发vue项目的能力

2.vue的特性

vue框架的特性,主要体现在如下两方面

1 数据驱动视图

2 双向数据绑定

数据专为核心


2.1 数据驱动视图

在使用了vue的页面中,vue会监听数据的变化,从而自动重新渲染页面的结构

          自动渲染                     变化
页面结构<-----------vue监听数据的变化<-------->页面所依赖的数据

            数据驱动视图
好处 程序员只要把数据维护好,当页面数据发送变化时,页面会自动重新渲染 
注意:数据驱动视图是单向的数据 绑定

数据的变化会驱动视图自动更新

2.2 双向数据绑定

在填写表单时,双向数据绑定可以辅助开发者在不操作DOM的前提下
自动把用户填写的内容同步到数据源中

好处 开发者不需要手动操作DOM元素 来获取表单元素最新的值


在网页中 form表单负责采集数据 Ajax负责提交数据


          自动渲染                     变化
页面结构<-----------vue<-------->页面所依赖的数据
    ----------->                  --------->
      值发生变化                   自动同步

js数据的变化 会被自动渲染到页面上

页面上表单采集的数据发送变化的时候,会被vue自动获取到,并更新到js中

注意:数据驱动视图和双向数据绑定的底侧原理是MVVM(Mode数据源 View视图 ViewModel就是vue的实例)

2.3 MVVM

MVVM是vue实现数据驱动视图和双向数据绑定的核心原理
MVVM指的是Model View 和ViewModel

它把每个html页面拆分成三个部分

MVVM概念中

Model 表示当前页面渲染时所依赖的数据源
View  表示当前页面所渲染的DOM结构
ViewModel 表示vue的实例 它是MVVM的核心

View  ViewModel Model

DOM    vue     jsObject

       MVVM示例图

2.4 MVVM的工作原理

ViewModel作为MVVM的核心,是它把当前页面的数据源(Model)和页面结构(View)连接在一起

        自动更新          监听数据源变化
View<-----------ViewModel<----------->Model
     ----------->         ----------->
      监听DOM变化           自动同步

        MVVM的工作原理

当数据源发送变化时,会被ViewModel监听到,VM会根据最新的数据源自动更新页面的结构
当表单元素的值发送变化时,也会被VM监听到,VM会把变化过后最新的值自动同步到Model数据源中


3.vue的版本

当前vue共有3个大版本其中
2.x版本的vue是目前企业级项目开发中的主流版本
3.x版本的vue于2020-09-19发布,生态还不完善,尚未在企业级项目开发中普及和推广
1.x版本的vue几乎被淘汰,不再建议学习与使用

总结:
3.x版本的vue是未来企业级项目开发的趋势
2.x版本的vue在未来会被逐渐淘汰

vue的基本使用

1.基本使用步骤

1 导入vue.js的script脚本文件

2 在页面中声明一个将要被vue所控制的DOM区域

3 创建vm实例对象

vue的指令与过滤器

1.指令的概念

指令是vue为开发者提供的模板语法 用于复制开发者渲染页面的基本结构

vue中的指令按照不同的用途可以分为如下6大类

内容渲染指令 属性绑定指令 事件绑定指令
双向绑定指令 条件渲染指令 列表渲染指令

注意:指令是vue开发中最基础 最常用 最简单的知识点

1.1 内容渲染指令

内容渲染指令依赖辅助开发者渲染DOM元素的文本内容 常用的有3个

v-text {{}} v-html

v-text

缺点:会覆盖元素原有的内容

用法示例 

        <!-- 把username 对应的值 渲染到第一个p标签中 -->
        <p v-text="username"></p>
        <!-- 把gender对应的值 渲染到第二个p标签中0 -->
        <!-- 注意: 第二行p标签中 默认的文本 性别会被gender的值覆盖掉 -->
        <p v-text="gender">性别</p>

{{}}

vue提供的{{}}语法,专门用来解决v-text会覆盖默认文本内容的值问题
{{}}语法专业名称是插值表达式

实际开发中用的最多,只是内容的占位符 不会覆盖原有的内容


v-html

v-text指令和插值表达式只能渲染纯文本内容。
如果要包含html标签的字符串渲染为页面的html元素 则用v-html

1.2 属性绑定指令

注意:
插值表达式只能用在元素的内容节点中 不能用在元素的属性节点中

如果需要为元素的属性动态绑定属性值 则需要用到v-bind属性绑定指令

简写
vue规定v-bind:指令可以简写为:


使用JS表达式

在vue提供的模板渲染语法中,除了支持绑定简单的数据值之外 还支持js表达式的运算

{{number + 1}}

{{ok ? 'yes':'no'}}

在v-bind期间 如果绑定内容需要进行动态拼接 则字符串的外面应该包裹单引号 
     

   <div :title="'box'+index">这是一个div</div>

1.3 事件绑定指令

vue提供了v-on事件绑定指令,用来辅助程序员为DOM元素绑定事件监听。

<p>count的值是:{{ count }}</p>
<button v-on:click="add">+1</button>
            methods: {
                add: function () {
                    console.log('ok');
                }
            }

简写

<p>count的值是:{{ count }}</p>
<button @click="add">+1</button>
            methods: {
                add() {
                    console.log('ok');
                }
            }

 <!-- v-on:指令可以被简写为@ -->

注意:原生DOM对象有onclick oninput onkeyup等原生事件
分别为:v-on:click v-on:input v-on:keyup

在需要用哪个实验对象的时候 用$event

<button @click="add(n,$event)">+N</button>

method: {
                add(n,e) {
                    this.count += n
                    if (this.count % 2 === 0) {
                        // 偶数
                        e.target.style.backgroundColor = 'red'
                    } else {
                        e.target.style.backgroundColor = ''
                        // 奇数
                    }
                }
            }

事件修饰符

在事件处理函数中调用event.preventDefault()或event.stopPropagation() 
因此vue提供了事件修饰符的概念,来辅助程序员更方便的对事件的触发进行控制

.prevent 阻止默认行为 *
.stop    阻止事件冒泡 *
.capture 以捕获模式触发当前的事件处理函数
.once    绑定的事件只触发1次
.self     只有在event.target是当前原生自身时触发事件处理函数


语法格式

<a href="http://www.bnaidu.com" @click.prevent="show">跳到百度首页</a>


按键修饰符

在监听键盘事件 外面经常需要判断详细的按键 此时可以为键盘相关的事件添加按键修饰符

<!-- 只有在key是Esc时调用vm.clearInput -->
<input type="text" @keyup.esc="clearInput" @keyup.enter="comit"> 
<!-- 只有在key是Esc时调用vm.comit -->
<input type="text"  @keyup.enter="comit">


1.4 双向绑定指令

vue提供了v-model双向数据绑定指令 用来辅助开发者不操作DOM元素的前提 快速获取表单

v-model是双向 v-bind是单向

只有root改变重新渲染 ™两个才会变

input输入框 type=radio type='xxx'
textarea select 

为了方便对用户输入的内容进行处理 vue为v-model提供了3个修饰符

.number 自动将用户的输入值转化为数值类型 
.trim   自动过滤用户输入的首尾空白字符
.lazy   在"change"时而非"input时更新"

<input type="text" v-model="n1">+
<input type="text" v-model="n2">=
<span>{{ n1+n2}}</span>

1.5 条件渲染指令

条件渲染指令用来辅助开发者按需控制DOM的显示与隐藏
条件渲染指令有如下两个

v-if v-show


2.过滤器

过滤器是vue为开发者提供的功能 常用于文本的格式化 过滤器可以用在两个地方
过滤器可以用在两个地方:插值表达式 v-bind
过滤器应该被添加在js表达式的尾部 由管道符进行调用
    在双花括号中通过管道符调用capi过滤器 对message的值进行格式化

        <p>message的值是:{{ message | capi }}</p>
    
                // 过滤器本质上是函数
            filters: {
                capi(val) {
                    // val.charAt(0) 把字符串把对应索引值
                    // val 是指竖线前面的值 现在是message val也是任意的
                    const first = val.charAt(0).toUpperCase()
                    const other = val.slice(1)
                    // 强调: 过滤器中 一定要由一个返回值
                    return first + other
                }
            }

过滤器的注意点
1.定义到filters节点下 本质是一个函数
2.在过滤器函数中,一定要有return值
3.在过滤器的形参中 就可以获取到管道符前面待处理的哪个值
4.如果全局过滤器和私有过滤器
2.2 私有过滤器和全局过滤器名字一致 此时按照就近原则 调用的是私有过滤器在filterts节点下定义的过滤器称为私有过滤器 因为只能在vm实例所控制的el区域内使用
如果希望在多个vue实例之间共享过滤器 则可以按照如下的格式全局过滤器

    第1个参数 是全局过滤器的名字
    第2个参数 是全局过滤器的处理函数

        // 使用Vue.filter()定义全局过滤器
        Vue.filter('capi', function (str) {
            const first = str.charAt(0).toUpperCase
            const other = str.slice(1)
            return first + other
        })

2.3 连续调用多个过滤器

过滤器可以串联地进行调用,例如

把message的值 交给capi进行处理
把capi处理的结果 再交给avx进行处理
最终把avx处理的结果 作为最终的值渲染到页面上

     

 {{ message | capi | avx}}

2.4 过滤器传参

过滤器的本质是js函数

       <p>message的值是:{{ message | capi }}</p>
第一个参数 永远都是管道符前待处理的值
第二个参数开始 才是调用过滤器传参过来的arg1 arg2

Vue.filter('filterA',(msg,arg1,arg2)=>{
   //过滤器的代码递减
})


2.5 过滤器的兼容性

过滤器仅在2.x和1.x中受支持

在企业级项目开发中
使用的是2.x版本的vue 则依然可以使用过滤器的相关功能
如果项目已经升级到了3.x版本的vue 官方建议计算属性或方法代替      

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值