Vue 基础入门 - 看这一篇就够了!!!

少则得,多则惑,其出弥远,其知弥少!

小白眼中的前端开发:

◆ 会写 HTML+CSS+JavaScript 就会前端开发
◆ 需要美化页面样式,就拽一个bootstrap过来
◆ 需要操作DOM或发起Ajax请求,再拽一个jQuery过来
◆ 需要快速实现网页布局效果,就拽一个Layui过来

实际前端开发:

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

目录

Vue2.0-1 Vue简介

Vue2.0-2 Vue基本用法 初体验

Vue2.0-3 Vue六大指令

Vue2.0-4 综合案例

Vue2.0-5 入门总结

Vue2.0-6 过滤器

Vue2.0-7 侦听器

Vue2.0-8 computed计算属性(了解)

Vue2.0-9 axios专注数据请求

Vue2.0-10 vue-cli

Vue2.0-11 组件

Vue2.0-12 组件的props

Vue2.0-13 scoped属性解决 样式冲突

Vue2.0-14 组件的声明周期

Vue2.0-15 数据间传值

Vue2.0-16 $refs 引用


Vue2.0-1 Vue简介

① 官方概念:Vue是一套用于构建用户界面的前端框架。

1、构建用户界面:用vue往html页面中填充数据,非常方便。

2、框架:我们要学习Vue的指令、组件(是对UI结构的复用)、路由、vuex、vue组件库。

② vue的特性:数据驱动视图和双向数据绑定

特性 作用 说明
数据驱动视图 数据的变化会驱动视图自动更新 页面结构会被vue自动渲染
双向数据绑定 form表单负责采集数据,Ajax负责提交数据到js数据中 vue自动获取表单数据

③ MVVM是vue实现数据驱动视图和双向数据绑定的MVVM核心原理,它把每个HTML页面拆分成了三部分:

1、Model: 表示当前页面渲染时所依赖的数据源

2、View: 表示当前页面所渲染的DOM结构

3、ViewModel: 表示vue实例,它是MVVM的核心

Vue2.0-2 Vue基本用法 初体验

 
     
      {{ message }} 
                   

Vue2.0-3 Vue六大指令

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

序列 按照用途分类 命令
内容渲染指令 v-text="message"、{{ message }}、v-html="message"
属性绑定指令 v-bind:value="message" 简写用冒号:value="message"
事件绑定属性 v-on:click 简写用@click
双向绑定指令 v-model="message"
条件渲染指令 v-if="true"移除元素 v-show="false"修改display:none
列表渲染指令 v-for="(item,index) in list"

① 内容渲染指令

 
     
         
         

                 

 {{ message }} 

                 
    
    

② 属性绑定指令






{{ number + 1 }}
{{ ok ? 'yes' : 'no' }}
{{ message.split('').reverse().join('') }}

③ 事件绑定指令 事件修饰符 按键修饰符

 
 -1  {{ count }}  +3
 
 
 虽不传参,但默认会含有event参数
  $event 是vue提供的内置变量 固定写法 
 
 
 跳转到百度






  const vm = new Vue({
    el: "#app",
    data: {count: 0},
    methods: {
      sub(){ this.count-- ; },
      add(n){ this.count += n ; },
      changeColor(e){ e.target.style.backgroundColor = 'red'; },
      changeColor1(n,e){ e.target.style.backgroundColor = 'blue'; },
      show(){ console.log("事件修饰符,阻止a标签跳转"); }
    }
  })


事件/按键修饰符 说明( 红色为常用事件 )
.prevent 阻止默认行为(例如:阻止a连接的跳转、阻止表单的提交等)@click.prevent
.stop 阻止事件冒泡
.capture 以捕捉模式触发当前的事件处理函数
.once 绑定的事件只触发一次
.selt 只有在event.target是当前元素自身时触发事件处理函数
.enter(按键修饰符) 按下Enter键时触发相应功能 例如:@keyup.enter = "submit"
.esc(按键修饰符) 按下Esc键时触发功能 例如:@keyup.esc = "clearValue"

④ 双向绑定指令

 
 
   北京
   杭州
   苏州
 
 
 
 
data: {
  city: 2
}

v-model专用修饰符 作用 实例
.number 自动将用户的输入值转为数值类型
.trim 自动过滤用户输入的首尾空白字符
.lazy 在"change"时而非"input"时更新

⑤ 条件渲染指令


加油
良好
优秀
当flag为true时,显示该元素

⑥ 列表渲染指令

 
 
 
   

 {{"索引"+index}}: {{item.name}} 

data: {   list: [     {id:"A",name:"张三",age:"20"},     {id:"B",name:"李四",age:"80"}   ] }

Vue2.0-4 综合案例

① 案例界面

Vue 基础入门 - 看这一篇就够了!!!_第1张图片

② 关键代码展示

 
   // 5、实现v-model.trim功能 去除前后空格
   
   // 4、使用.prevent修饰符阻止表单默认提交,并触发add功能
   添加
 
 
   // 1、渲染数据
   
    {{ item.id }}
    {{ item.name }}
    
      
        // 2、动态生成checkbox的id属性值,添加v-mode 并做if判断                  已启用         已禁用       
         {{ item.time }}            // 3、传入id实现删除功能      删除           

Vue2.0-5 入门总结

① 能够知道vue的基本使用步骤

② 掌握vue中常见指令的用法

③ 掌握vue中过滤器的基本用法

Vue2.0-6 过滤器

① 私有过滤器

 
  {{ message | capitalize }} 
 
 
 

② 全局过滤器

 
  {{ message | capitalize }} 
 
 
 

③ 格式化时间过滤器

 
   {{ date | capitalize }} 
 
 
 
 

④ 调用多个过滤器 Vue 3.0 剔除了过滤器

 
 

  {{ msg | capitalize(arg1,arg2) }} 

Vue2.0-7 侦听器

侦听器格式 优缺点
方法格式侦听器 缺点①:无法自动触发。缺点②:如果侦听对象数据,是不会触发侦听
对象格式侦听器 优点①:使用immediate选项自动触发一次。优点②:通过deep选项,侦听对象数据。

① 侦听器基本语法

 
 
 
 
 

② 判断用户名是否被占用

 
 
 

③ immediate选项 侦听器自动执行一次

 

④ 开启deep深度监听对象数据的变化

 

Vue2.0-8 computed计算属性(了解)

特点:要被定义为方法,在使用计算时,当普通属性使用即可。

好处:实现代码复用,只要计算属性依赖的数据源发生变化,则计算属性自动重新求值!

 
     
     
     
     
      
 
 
 

Vue2.0-9 axios专注数据请求

① 基本语法

 
 

② 结合 async 和 await 调用axios

 // 如果调用的方法返回值是Promise实例,则前面可以添加 await
 // await 还能用在 async 修饰的方法中
 document.querySelector('#btn').addEventListener('click',async function(){
     const result = await axios({
         method: 'post',
         url: 'http://www.liulongbin.top:3006/api/post',
         data: {
             name: 'zs',
             age: 19
        }
    })
    console.log(result);
})

③ 使用解构赋值

 // 1、调用axios之后,使用async / await 进行简化
 // 2、使用解构赋值,从axios封装的大对象中把 data 属性解构出来
 // 3、把解构出来的 data 属性,使用冒号进行重命名,一般命名为 { data:res }
 document.querySelector('#btnGet').addEventListener('click',async function(){
     const { data:res } = await axios({
         method: 'get',
         url: 'http://www.liulongbin.top:3006/api/getbooks',
         params: {
             id: 1
        }
    })
    console.log(res.data);
})

④ 基于axios发起get和post请求

 // GET请求
 document.querySelector('#btnGet').addEventListener('click',async function(){
     const {data:res} = await axios.get('http://www.liulongbin.top:3006/api/getbooks?id=1')
     console.log('get请求',res);
 })
 
 // POST请求
 document.querySelector('#btnPost').addEventListener('click',async function(){
     const {data:res} = await axios.post('http://www.liulongbin.top:3006/api/post',{username:'zs',age:19})
    console.log('post请求',res);
})

Vue2.0-10 vue-cli

① vue-cli 简介与安装

vue-cli是Vue.js开发的标准工具,简化了程序员基于webpack创建工程化的Vue项目过程。

引用vue-cli官网上的一句话:程序员可以专注在撰写应用上,而不必花时间纠结webpack配置的问题。

// vue-cli 是 npm 上的一个全局包 用-g参数安装
E:\Demo\vue-cli>npm install -g @vue/cli

// 查看安装是否成功
E:\Demo\vue-cli>vue -v

// 注意:如果报错 一般是安装的位置不对 将vue-cli东西拷贝到nodejs文件夹内
E:\Demo\vue-cli>npm list --global

② 创建vue项目

 // 1、vue create 项目名称
 E:\Demo\vue-cli>vue create demo-test
 
 // 2、选择手动安装功能
 > Manually select features
 
 // 3、选择babel 和 Css Pre-processors
  (*) Babel                              -- 必须安装babel
  ( ) TypeScript                         -- 微软的脚步语言 比javascript更强大
 ( ) Progressive Web App (PWA) Support  -- 渐进式web框架
 ( ) Router                             -- 路由
 ( ) Vuex                               -- vuex                            
>(*) CSS Pre-processors                 -- 选择CSS 预处理器
 ( ) Linter / Formatter                 -- 格式校验 约束团队使用固定格式,比方说用单引号还是双引号
 ( ) Unit Testing
 ( ) E2E Testing

// 4、选择2.0版本
> 2.x

// 5、选择less
> Less

// 6、选择独立的配置文件
> In dedicated config files    -- 将babel、ESLint等插件放到独立配置文件
  In package.json              -- 将配置文件放到package.json文件中

// 7、选择Y创建成预设配置,然后输入预设名即可

// 8、在VSCode启动终端 访问主页
Terminal -> new Terminal 或 Ctrl + Shift + `
E:\Demo\vue-cli\demo-first> npm run serve
App running at:
 - Local:   http://localhost:8080/
 - Network: http://192.168.1.2:8080/

③ vue项目中src目录的构成

assets 文件夹:存放项目静态资源,例如:CSS样式表,images图片资源

components 文件夹:程序员封装的可复用的组件

④ vue项目的运行流程

在工程化的项目中,vue要做的事很单纯:通过main.js把App.vue渲染到index.html 的指定区域中

1、App.vue 用来编写待渲染的模板结构

2、index.html 中需要预留el区域

3、main.js 把App.vue 渲染到了index.html 所预留的区域中

⑤ 基本使用

目录结构
|Demo
|----public
|--------index.html
|----src
|--------main.js
|--------Test.vue





import Vue from 'vue'
import Test from './Test.vue'

Vue.config.productionTip = false

new Vue({
  // h(Test) 指向 import Test
  render: h => h(Test),
}).$mount('#app')

Vue2.0-11 组件

① vue 组件的三个组成部分

什么是组件化开发:根据封装思想,把页面上可重用的UI结构封装为组件,从而方便项目开发和维护

vue中规定:组件的后缀名是.vue

vue组件的三个组成部分:

内容 说明
template 组件的模板结构
script 组件的JavaScript行为
style 组件的样式
Test.vue中代码示例:
1、data必须是一个函数,用return返回数据
2、methods方法、watch侦听、computed计算、filters过滤器
3、style中启用less样式





// 启用less样式


.lessTest {
    background-color: pink;
    h2 {
        text-align: center;
        color: white;
    }
    p {
        color: blue;
    }
}


② 使用组件的三个步骤

◆ 步骤1、使用import语法导入需要的组件

import Left from '@/components/left.vue'
import Right from '@/components/right.vue'

◆ 步骤2、使用 components 节点注册私有组件

export default {
  components: {
    Left,
    Right
  }
}

◆ 步骤3、以标签形式使用刚才注册的组件


③ 在main.js中通过Vue.component注册全局组件

import Vue from 'vue'
import App from './App.vue' 

// 导入需要被全局注册的那个组件
import Count from '@/components/Count.vue'
Vue.component('MyCount',Count);

Vue.config.productionTip = false

new Vue({
  render: h => h(App),
}).$mount('#app')

④ 常用的插件

Vue2.0-12 组件的props

① props 是组件的自定义属性,在封装通用组件的时候,合理使用props可以极大提高组件的复用性

# 父对象




#子对象引用

② props 的 default 默认值,类型校验,必填校验

export default {
  props: {
    init: {
      // 用default属性定义默认值
      default: 0,
      // init的值必须是指定类型 Number/String/Boolean/Array/Object...
      type: Number,
      // 必填校验项
      require: true
    }
  }
}

Vue2.0-13 scoped属性解决 样式冲突

// 只要用到样式就要追加scoped属性,该属性表示样式只在当前文件生效

  .left {
    border: 1px solid red;
  }

  // 使用deep修改子组件的样式,通常修改第三方组件样式会使用
  /deep/ div {
    border: 1px solid red;
  }

Vue2.0-14 组件的声明周期

① 生命周期 & 生命周期函数

生命周期(Life Cycle)是指一个组件从创建->运行->销毁的整个阶段,强调的是一个时间段。

生命周期函数:是由vue框架提供的内置函数,会伴随着组件的生命周期,自动按次序执行。

created、mounted、undated 三个周期比较重要
Vue 基础入门 - 看这一篇就够了!!!_第2张图片Vue 基础入门 - 看这一篇就够了!!!_第3张图片

② created生命周期函数很重要


Vue2.0-15 数据间传值

① 父向子传值:父组件向子组件共享数据需要使用自定义属性

Vue 基础入门 - 看这一篇就够了!!!_第4张图片

② 子向父传值:子组件向父组件共享数据使用自定义事件

Vue 基础入门 - 看这一篇就够了!!!_第5张图片

③ 兄弟组件间数据共享:使用EventBus

1、 创建eventBus.js模块,并向外共享一个Vue的实例对象

2、 在数据发送方,调用bus.$emit('事件名称',要发送的数据)方法触发自定义事件

3、 在数据接收方,调用bus.$on('事件名称',事件处理函数) 方法注册一个自定义事件Vue 基础入门 - 看这一篇就够了!!!_第6张图片

Vue2.0-16 $refs 引用

每个vue的组件实例上,都包含一个$refs对象,默认情况下$refs指向一个空对象

① 使用 ref 引用DOM元素




② 使用 ref 引用组件实例




③ this.$nextTick(cb)的应用场景:

 
    // 显示输入框时 自动获取焦点        点击按钮获取输入框,同时获取焦点  
export default {   data(){     return {       flag: false     }   },   methods: {     btn(){       this.flag = true;       // this.$nextTick(cb)方法:在组件的DOM更新完后执行cb回调函数       this.$nextTick(()=>{         this.$refs.inputRef.focus();       })     },     hidden(){       this.flag = false;     }   } }

④ some循环:满足条件退出循环 比forEach性能好


⑤ every循环 判断是否全选中

export default {
  data(){
    return {
      arr: [
        {name: "A",status: true},
        {name: "B",status: true},
        {name: "C",status: true},
      ],
    }
  },
  methods: {
    ereryBtn(){
      // 当所有数据为true返回true 否则返回false
      const flag = this.arr.every(item=>item.status);
      console.log(flag);
    }
  }
}

⑥ reduce汇总 用法和简写用法

methods: {
    reduceBtn1(){
      // 复杂reduce写法 arr.filter(item=>item.status).reduce((累加的结果,item)=>{},初始值)
      const sum = this.arr.filter(item=>item.status).reduce((sum,item)=>{
        return sum += item.price * item.count ;
      },0)
      console.log("reduce:"+sum);
    },
    reduceBtn2(){
      // 简写reduce代码 建议用下面的代码
      const sum = this.arr.filter(item=>item.status).reduce((sum,item)=>sum += item.price * item.count,0)
      console.log("reduce:"+sum);

    }
  }

你可能感兴趣的:(前端,vue.js,javascript,ecmascript)