web前端学习(一):国内最常用,又优秀的web框架,Vue渐近式框架

一、vue3基础

1.前言

Vue 是一套用于构建用户界面的渐进式框架。开发可以根据需求,逐渐递增所要的方式或者功能模块, vue的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。

vue对项目的侵入性较大,使用者要按照框架所规定的某种特定规范进行开发,项目如果需要更换框架,则需要重新架构整个项目。

2.两大核心

  1. 响应式的数据绑定:当数据发生改变,视图可以自动更新,可以不用关心dom操作,而专心数据操作可组合的视图组件:
  2. 组件式开发: 把视图按照功能切分成若干基本单元,组件可以一级一级组合整个应用形成倒置组件树,可维护,可重用,可测试

1.html页面开发

  ---- css
        
        
        
    ---- html
        
{{message}}

{{title}}

  • {{item.title}}
---- js

2.vue-cli脚手架

》Vue-CLI (Command Line Interface)
》Vue-CLI是Vue官方提供的脚手架工具,默认已经帮我们搭建好了一套利用Webpack管理vue的项目结构”
》命令安装: npm install @vue/cli -g           
》检查版本: vue --version
》创建项目: vue create 项目名称

1.创建vue项目

1.创建vue-project项目           
vue create vue-project


2.运行项目
npm run serve (--port=8888)   默认是8080端口

3.打包项目
 npm run build
 

webpack修改默认端口
在package.json中修改脚本配置:"serve": "vue-cli-service serve --port 8888"
 

创建项目流程的其它配置

(1.执行创建命令         vue create vue-project

(2.设置相关插件        一般选择default Vue 3

(3.然后进入项目         cd  项目名称  (上下键选择,空格确认勾选)
     --》sass/scss   --》 Airbnb  --》 >(*) Lint on save  dedicated config files
                                       (*) Lint and fix on commit (requires Git)

   该模板会被计算机保存在计算机所在的用户文件夹下(如:Icy-yun),如果删除vuerc文件,就会删除对应的模板

出现eslint的问题

 
1.webstorm配置
eslint报错,settings --》 搜索eslint --》 选择Eslint package: C:\wamp64\www\vue3\vuedemo\node_modules\eslint
--》 最后在App.vue右键选择Fix Eslint Problems

2.项目配置
eslint 报错, 然后在vue.config.js中添加  
module.exports = {
    ....
    lintOnSave:false
}

2.根目录配置

-- vue.config.js

var webpack = require('webpack'); 
// 注意这一行一定要加上,原本配置中没有,如果不加会导致下面报错webpack未定义
module.exports = {
   //vue-cli3.0 里面的 vue.config.js做配置
    // 开发服务器,跨域使用
    // devServer: {
    //     proxy: {
    //         '/api': {
    //             target: 'http://47.96.133.174:9090',  // 后台接口域名
    //             ws: true,        //如果要代理 websockets,配置这个参数
    //             secure: false,  // 如果是https接口,需要配置这个参数
    //             changeOrigin: true,  //是否跨域
    //             pathRewrite:{
    //               '^/api': '/'
    //             }
    //         }
    //     }
    //   },


    configureWebpack:{
        resolve:{
            alias:{
                'assets':'@/assets',
                'components':'@/components',
                'network':'@/network',
                'utils':'@/utils',
                'views':'@/views',
            }
        },
        plugins:[
            new webpack.ProvidePlugin({
                jQuery: 'jquery',
                $: 'jquery'
            })
        ]
    },
    // 注意:不要添加下面一行,否则路由引入会出现异常
    // publicPath:'./' 
};


 

3.静态资源引入

1.在assets同级目录下的文件,可以直接引入 

(1.main.js中   import 'assets/font/iconfont.css'

(2.App.vue  
  background:url(assets/images/bg-white.png)
  @import("assets/font/iconfont.css") 
 

2.在组件内引入图片, html,和css同理


3.组件内引入其它组件 
import HelloWorld from '@/components/HelloWorld.vue'



3.vue模板语法

1.{{}}插值、v-指令

1.基本语法


{[msg}}

数据只第一次时显示,不响应式

{[msg}}

, 内容原封不动的展示, 包含空格,换行

, 就相当于插值表达式的功能

, 可以解析标签, 如果有scoped,则不会受到其内部css的影响 data:{ msg:'test message', title:'

Title

` }

2.使用实例


    ---- src/App.vue文件内容
    

    

    

2.v-bind绑定属性

---- src/App.vue文件内容



 

3.computed计算属性

1.基本语法

》计算属性关键词: computed。
》计算属性在处理一些复杂逻辑时是很有用的。
    computed:{
        site: {
        //getter
        get: function () {
            return this.name +"" + this.url
        },
        // setter
        set: function (newValue) {
            var names = newValue.split(" ")
            this.name = names[0]
            this.url = names[names.length - 1]
        }
    }}

2.使用实例


---- src/App.vue文件内容
    

    
 

4.v-on事件监听

1.基本语法

》在前端开发中,需要经常和用户交互
》绑定事件监听器指令: v-on
》缩写:@(语法糖)
》参数: $event
》v-on事件修饰符号
    .stop阻止事件冒泡
    .self 当事件在该元素本身触发时才触发事件
    .capture 添加事件侦听器是,使用事件捕获模式
    .prevent 阻止默认事件
    .once事件只触发一次

2.使用实例


---- src/App.vue文件内容
    

    
    

5.v-if v-show条件分支

1.基本语法

》 v-if,和v-show
    v-if是“真正”的条件渲染,因为它会确保在切换过程中条件块内的事件监听器和子组件适当地被销毁和重建。
    v-show就简单得多——不管初始条件是什么,元素总是会被渲染,并且只是简单地基于CSS进行切换
》v-if v-else
》v-if v-else-if v-else

2.使用实例

    ---- src/App.vue文件内容
    

         

6.v-for v-key循环遍历

1.基本语法

》遍历指令: v-for
》遍历数组v-for="(item, [index]) in数组”
》遍历对象v-for=" (value,[key], [index]) in对象”
》vue中列表循环需加:key="唯一标识"唯一标识可以是item里面id index等,因为vue组件高度复用增加Key可以标识组件的唯一性,为了更好地区别各个组件 
》key的作用主要是为了高效的更新虚拟DOM,使用diff算法的处理方法,对操作前后的dom树同一层的节点进行对比,一层一层对比

2.使用实例

---- src/App.vue文件内容



7.v-model双向绑定

1.基本语法

》v-model指令的本质是:它负责监听用户的输入事件,从而更新数据,并对一些极端场景进行一些特殊处理。同时,v-model会忽略所有表单元素的value、checked、selected特性的初始值,它总是将vue实例中的数据作为数据来源。然后当输入事件发生时,实时更新vue实例中的数据。
》实现原理: 
   
》v-model的修饰符号:
  .lazy 懒加载修饰符
  .number修饰符让其转换为number类型
  .trim修饰符可以自动过滤掉输入框的首尾空格
  .keyup.enter 修饰符

2.使用实例

---- src/App.vue文件内容


 

4.vue项目结构

1.组件化开发

》组件化是Vue的精髓,Vue开发就是由一个一个的组件构成的组件的分类:
》页面级组件
    业务上可复用的基础组件
    与业务无关的独立功能组件
》组件开发三要素( prop,自定义事件,slot)
    prop用于定义组件的属性。
    自定义事件用于触发组件的事件。
    slot用于组件功能的扩展。
》组件设计需要考虑的问题
    可扩展性强
    组件中方法函数的抽离,便于复用,适用程度高。
    文档清楚详细
    颗粒度合适,适度抽象
    功能尽可能单一,代码行数适中

2.生命周期函数

1.基本的生命周期

Vue3中组件的生命周期函数, (与data,methods同级)
beforeCreate() {
    console.log("实例刚刚被创建");   
},
created() {
    console.log("实例已经创建完成");
    },
beforeMount() {
    console.log("模板编译之前”);
    }
mounted(){
    console.log("模板编译完成");
},
beforeUpdate(){
    console.log("数据更新之前");
},
updated() {
    console.log("数据更新完成");
},
beforeUnmount(){
    console.log("实例销毁之前");                  
},
unmounted(){
    console.log(“实例销毁完成");
},

2.特殊生命周期


// 特殊的生命周期
activated(){
    console.log("keep-alive缓存的组件激活时调用);   
    使用标签包含所要监听的内容
},
deactivated({
    console.log('keep-alive缓存的组件停用时调用');
},

3.常用场景


activated(){
    console.log("keep-alive缓存的组件激活时调用);   
    // 使用标签包含所要监听的内容
    this.$nextTick(()=>{                        
        //等待下一次DOM更新,具有延迟的效果。
        //  调用子组件的方法
        this.$refs.username.abc()             
    })
},

3.slot插槽的应用

1.基本语法

》Vue 实现了一套内容分发的API,这套API的设计灵感源自Web Components规范草案,将元素作为承载分发内容的出口。
》插槽可以实现组件的扩展性,抽取共性,保留不同
slot     插槽占位
template 向子组件的插槽块添加内容

2.使用实例

---- MyBar.vue文件内容(子组件)
0000 1111 2222
---- MyMain.vue文件内容(父组件)