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

5 篇文章 2 订阅
订阅专栏

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

小白眼中的前端开发:

◆ 会写 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基本用法 初体验

 <body>
     <!-- 3、希望vue控制下面的div,帮我们把数据填充到div内部 -->
     <div id="app"> {{ message }} </div>
 
     <!-- 1、导入vue库文件,在window全局就有了vue这个构造函数 -->
     <script src="./lib/vue-2.6.12.js"></script>
 
     <!-- 2、创建vue实例对象 -->
     <script>
        const vm = new Vue({
            // el属性是固定写法,表示当前实例要绑定哪个区域
            el: "#app",
            // data对象就是要渲染到页面上的数据
            data: {
                message: "hello world !!"
            }
        })
    </script>
</body>

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"

① 内容渲染指令

 <body>
     <div id="app">
         <!-- v-text 指令缺点:会覆盖元素内部原有内容 -->
         <p v-text="message"></p>
         <!-- {{ }} 插值表达式,实际开发中最常用,不会覆盖原有内容 -->
         <p> {{ message }} </p>
         <!-- 可以将带标签的字符串渲染为页面的HTML元素 -->
         <div v-html="info"></div>
     </div>
    <script>
        const vm = new Vue({
            el: "#app",
            data: {
                message: "hello world !!",
                info: "<h4 style='color:red'> v-html语法 </h4>"
            }
        })
    </script>
</body>

② 属性绑定指令

<!-- v-bind 为元素属性动态绑定值,简写用英文冒号: -->
<input type="text" v-bind:placeholder="message">
<input type="text" :placeholder="message">

<!-- Vue支持javascript表达式的运算 -->
{{ number + 1 }}
{{ ok ? 'yes' : 'no' }}
{{ message.split('').reverse().join('') }}
<div :id = "'list' + id"></div>

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

 <!-- v-on:为事件绑定指令,简写用@符号,原生DOM对象有onclick、oninput、onkeyup等 -->
 <button v-on:click="sub">-1</button> <span> {{ count }} </span> <button @click="add(3)">+3</button>
 
 <!-- 当不传参时,默认参数会存在event事件,同时vue也提供了内置变量叫$event,但不经常用 -->
 <button @click="changeColor">虽不传参,但默认会含有event参数</button>
 <button @click="changeColor1(2,$event)"> $event 是vue提供的内置变量 固定写法 </button>
 
 <!-- vue提供的事件修饰符替代事件处理函数中调用了event.preventDefault()或event.stopPropagation() -->
 <a href="http://www.baidu.com" @click.prevent="show">跳转到百度</a>

<!-- 按键修饰符 -->
<input type="text" @keyup.esc="clear" @keyup.enter="submit">

<script src="./lib/vue-2.6.12.js"></script>
<javascript>
  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标签跳转"); }
    }
  })
</javascript>

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

④ 双向绑定指令

 <!-- html代码 -->
 <select v-model="city">
   <option value="1">北京</option>
   <option value="2">杭州</option>
   <option value="3">苏州</option>
 </select>
 <!-- 当失去焦点时,实现数据更新 -->
 <input type="text" v-model.lazy="message">
 <!-- js代码 -->
data: {
  city: 2
}

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

⑤ 条件渲染指令

<!-- type值为A 实现if判断 -->
<div v-if = "type === 'C'">加油</div>
<div v-else-if = "type === 'B'">良好</div>
<div v-else = "type === 'A'">优秀</div>
<!-- v-show指令 flag为真显示 为false隐藏元素 -->
<div v-show = "flag">当flag为true时,显示该元素</div>

⑥ 列表渲染指令

 <!-- html代码 -->
 <!-- 官方建议使用循环要绑定:key属性,不要用索引做key值 key可以是字符串也可以是数字 -->
 <div v-for="(item,index) in list" :key="item.id">
   <p> {{"索引"+index}}: {{item.name}} </p>
 </div>
 <!-- data中数据内容 -->
 data: {
   list: [
     {id:"A",name:"张三",age:"20"},
    {id:"B",name:"李四",age:"80"}
  ]
}

Vue2.0-4 综合案例

① 案例界面

② 关键代码展示

 <form >
   // 5、实现v-model.trim功能 去除前后空格
   <input type="text" placeholder="请输入品牌名称" v-model.trim="brand">
   // 4、使用.prevent修饰符阻止表单默认提交,并触发add功能
   <button type="submit" @click.prevent="add">添加</button>
 </form>
 <tbody>
   // 1、渲染数据
   <tr v-for="(item,index) in list" :key="item.id">
    <td>{{ item.id }}</td>
    <td>{{ item.name }}</td>
    <td>
      <div>
        // 2、动态生成checkbox的id属性值,添加v-mode 并做if判断
        <input type="checkbox" :id="'customSwitch'+item.id" v-model="item.status">
        <label :for="'customSwitch'+item.id" v-if="item.status">已启用</label>
        <label :for="'customSwitch'+item.id" v-else>已禁用</label>
      </div>
    </td>
    <td>{{ item.time }}</td>
    <td> 
     // 3、传入id实现删除功能
     <a href="javascript:;" @click="remove(item.id)">删除</a>
    </td>
  </tr>
</tbody>
<script src="./lib/vue-2.6.12.js"></script>
  <script>
    var app = new Vue({
      el: "#app",
      data: {
        brand: "",  // 接收录入的数据
        maxId: 4,   // 设定最大id
        list: [
          {id: 1,name: "宝马",status: true,time: new Date()},
          {id: 2,name: "奔驰",status: false,time: new Date()},
          {id: 3,name: "奥迪",status: true,time: new Date()},
        ]
      },
      methods: {
        // 根据id删除list中数据,练习filter过滤器
        remove(id){ this.list = this.list.filter(item => item.id != id) ; },
        // 添加数据后 清空输入框内容同时让id自增1
        add(){const obj={id: this.maxId,name: this.brand,status: true,time: new Date() };
          this.list.push(obj);
          this.brand = "";
          this.maxId++;
        }
      }
    })
  </script>

Vue2.0-5 入门总结

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

  • 导入vue.js文件
  • new Vue() 构造函数,得到vue实例对象
  • 声明el和data数据节点
  • MVVM的对应关系

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

  • 插值表达式、v-bind、v-on、v-if和v-else
  • v-for 和 :key、v-model

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

  • 全局过滤器Vue.filter('过滤器名称',function)
  • 私有过滤器filters节点

Vue2.0-6 过滤器

① 私有过滤器

 <!-- 过滤器常用于文本格式化 在双括号中通过"管道符"调用capi 过滤器 -->
 <div id="app"> {{ message | capitalize }} </div>
 
 <script src="./lib/vue-2.6.12.js"></script>
 <script>
   var vm = new Vue({
      el: "#app",
      data: {
        message: "hello !!!"
     },
     // 过滤器定义在filters节点之下,过滤器本身是一个函数
     filters: {
       capitalize (val){
         return val.charAt(0).toUpperCase()+val.slice(1)
       }
     }
  })
</script>

② 全局过滤器

 <!-- #app2 调用全局过滤器 -->
 <div id="app2"> {{ message | capitalize }} </div>
 
 <script src="./lib/vue-2.6.12.js"></script>
 <script>
     // 使用Vue.filter定义全局过滤器
     Vue.filter('capitalize ',function(str){
         // 首字母大写 返回:B:全局过滤器
         return str.charAt(0).toUpperCase()+str.slice(1);
    });
    const vm2 = new Vue({
        el: "#app2",
        data: {
            message: "b:全局过滤器"
        }
    });
</script>

③ 格式化时间过滤器

 <!-- 使用过滤器格式化时间 Fri Sep 02 2022 12:09:47 GMT+0800 (中国标准时间) => 2022-09-02 12:10:13   -->
 <div id="app">  {{ date | capitalize }} </div>
 
 <script src="./lib/dayjs.min.js"></script>
 <script src="./lib/vue-2.6.12.js"></script>
 <script>
     // 调用dayjs库 格式化时间
     Vue.filter('capitalize',function(time){
         return dayjs(time).format('YYYY-MM-DD HH:mm:ss');;
    });
    const vm = new Vue({
        el: "#app",
        data: {
            date: new Date()
        }
    })
</script>

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

 <!-- 过滤器常用于文本格式化 在双括号中通过"管道符"调用capi 过滤器 -->
 <p>  {{ msg | capitalize(arg1,arg2) }} </p>
 
 <script>
  ...
   // 第一个参数永远是管道符前面的值,从第二个参数开始才是传递过去的arg1 arg2...
   Vue.filters('capitalize',( msg,arg1,arg2 ) => {
     //过滤器代码逻辑
   })
 ...
</script>

Vue2.0-7 侦听器

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

① 侦听器基本语法

 <input id="app" type="text" v-model="username">
 
 <script src="./lib/dayjs.min.js"></script>
 <script src="./lib/vue-2.6.12.js"></script>
 <script>
     const vm = new Vue({
         el: "#app",
         data: {
             username: "侦听器",
        },
        // 所有侦听器 都定义到watch节点下
        watch: {
            // 侦听器是一个函数,要监视哪条数据变化,就把数据名作为方法名 新值在前 旧值在后
            username(newVal,oldVal){
                console.log("监听username的变化:",newVal,oldVal);
            }
        }
    })
</script>

② 判断用户名是否被占用

 <script src="./lib/dayjs.min.js"></script>
 <script src="./lib/jquery.min.js"></script>
 <script>
         const vm = new Vue({
             el: "input",
             data: {
                 username: "侦听器",
             },
             watch: {
                username(newVal,oldVal){
                    if (newVal === "") return alert("不能为空");
                    $.get('https://www.escook.cn/api/finduser/'+newVal,function(result){
                        console.log(result);
                    })
                }
             }
        })
    </script>

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

 <script>
   const vm = new Vue({
     el: "input",
     data: {
       username: "侦听器",
     },
     watch: {
       username: {
         handler(newVal,oldVal){
        console.log(newVal,oldVal);
      },
      // immediate 默认是false,控制侦听器是否自动执行一次
      immediate: true
    } 
  }
})
</script>

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

 <script>
         const vm = new Vue({
             el: "input",
             data: {
                 info: {
                     username: "deep深度侦听"
                 }
             },
             watch: {
                info: {
                    handler(newVal,oldVal){
                        console.log(newVal,oldVal);
                    },
                    // 开启deep深度监听,只要对象中任何一个属性发生变化,都会触发对象侦听器
                    deep:true
                } ,
                // 如果要侦听的是对象的子属性变化,则必须包裹一层单引号
                'info.username': {
                    handler(newVal,oldVal){
                        console.log(newVal);
                    }
                }
            }
        })
    </script>

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

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

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

 <div id = "app">
     <input type="text" v-model = "a">
     <input type="text" v-model = "b">
     <input type="text" v-model = "c">
     <!-- :style 代表动态绑定一个样式,它的值是一个 { } 样式对象,当前样式只包含 backgroundColor 背景颜色 -->
     <div class="box" :style="{backgroundColor:rgb}"></div> 
 </div>
 
 <script src="./lib/vue-2.6.12.js"></script>
<script>
    const vm = new Vue({
        el: "#app",
        data: {
            a: 0,
            b: 0,
            c: 0
        },
        computed: {
            // 这里用的 `${}` 表达式获取值
            // rgb作为一个计算属性,被定义成方法,最终返回rgb(x,x,x)的字符串
            rgb(){
                return `rgb(${this.a},${this.b},${this.c})` ;
            }
        }
    })
</script>

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

① 基本语法

 <script src="./lib/axios.js"></script>
 <script>
     // 1、GET请求
     axios({
         method: 'get',
         url: 'http://www.liulongbin.top:3006/api/getbooks',
         // get 传参用params url中的参数
         params: {
             id: 1
        },
    }).then((result) => {
        console.log(result);
    })

    // 2、POST请求
    document.querySelector('#btn').addEventListener('click',function(){
      axios({
        method: 'post',
        url: 'http://www.liulongbin.top:3006/api/post',
        // post 传参用data 请求体参数
        data: { name: 'zs', age: 19 }
      }).then((result) => {
        console.log(result);
      })
    })
</script>

② 结合 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

<!-- 1、Test.vue 代码 -->
<template>
    <div>
        <p> 这是第一个vue工程项目 </p>
    </div>
</template>

<!-- 2、main.js 代码 -->
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样式

<template>
    <div class="lessTest" @click="btn">
        <h2> 这是第一个 vue 工程项目 {{ msg }} </h2>
        <p>要想使用less样式   必须在style中启用 lang="less"</p>
    </div>
</template>

<script>
// 默认导出 这是固定写法!
export default {
    // 组件中 data 数据源必须是一个函数
    data(){
        // 在这个 return 出去的 { } 中 定义数据
        return {
            msg: 'Hello !!!'
        }
    },
    methods: {
        btn(){
            this.msg = "在vue组件中添加methods方法"
        }
    },
    // 侦听器
    watch: { },
    // 计算属性
    computed: { },
    // 过滤器
    filters: { },
}
</script>

// 启用less样式
<style lang = "less">

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

</style>

② 使用组件的三个步骤

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

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

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

export default {
  components: {
    Left,
    Right
  }
}

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

<template>
  <div>
    <left></left>
    <right></right>
  </div>
</template>

③ 在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')

④ 常用的插件

  • Auto Close Tag -- 自动闭合标签
  • Chinese (Simplified) (简体中文) Langu… -- 中文支持
  • open in browser -- 浏览器插件
  • Path Autocomplete -- 路径补全
    // 在VSCode配置文件settings.json中追加以下配置
    // 导入文件时是否携带文件的扩展名
    "path-autocomplete.extensionOnImport": true,
    // 配置 @ 的路径提示
    "path-autocomplete.pathMappings": {"@":"${folder}/src"},
  • Vetur
  • Vue 3 Snippets

Vue2.0-12 组件的props

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

# 父对象
<template>
  <div>
      <h3>{{ count }}</h3>
      <button @click="add">  +1  </button>
  </div>
</template>

<script>
export default {
  props: ['init'],
  data(){
      return {
          count: this.init
      }
  },
  methods: {
    add(){
      this.count += 1;
    }
  }
}
</script>

#子对象引用
<template>
    <div class="right"> 
        // 结合v-bind使用自定义属性
        <MyCount :init = "2"></MyCount>
    </div>
</template>

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

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

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

// 只要用到样式就要追加scoped属性,该属性表示样式只在当前文件生效
<style scoped>
  .left {
    border: 1px solid red;
  }

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

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

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

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

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

created、mounted、undated 三个周期比较重要

② created生命周期函数很重要

<script>
export default {
  data(){
      return {
          books: []
      }
  },
  methods: {
    initBooks(){ 
      var xhr = new XMLHttpRequest();
      xhr.addEventListener("load",() => {
        var result = JSON.parse(xhr.responseText) ;
        this.books = result.data ;
      })
      xhr.open("GET","http://www.liulongbin.top:3006/api/getbooks");
      xhr.send();
    }
  },
  // created生命周期函数,非常常用。调用methods的方法,然后将请求到的数据转存到data中,供template渲染使用
  created(){
    this.initBooks();
  }
}
</script>

Vue2.0-15 数据间传值

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

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

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

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

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

3、 在数据接收方,调用bus.$on('事件名称',事件处理函数) 方法注册一个自定义事件

Vue2.0-16 $refs 引用

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

① 使用 ref 引用DOM元素

<template>
  <div>
    // 元素上使用ref属性
    <h2 ref="refDom">App根节点</h2>
    <button @click="btn">实验ref获取DOM元素</button>
  </div>
</template>

<script>

export default {
  methods: {
    btn(){
      // 通过this.$refs获取DOM元素
      this.$refs.refDom.style.color = "red";
    }
  }
}
</script>

② 使用 ref 引用组件实例

<template>
  <div>
    <h2>App根节点</h2>
    <button @click="sonRef">来自父组件的点击</button>
    <hr>
    <Left ref="son"></Left>
  </div>
</template>

<script>
import Left from '@/components/Left.vue'

export default {
  methods: {
    // 使用ref直接调用子组件的reset方法
    resetSon(){
      this.$refs.sonRef.reset()
    }
  },
  components: {
    Left
  }
}
</script>

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

 <div>
    // 显示输入框时 自动获取焦点
   <input type="text" ref="inputRef" v-if="flag" @blur="hidden">
   <button @click="btn" v-else>点击按钮获取输入框,同时获取焦点</button>
 </div>


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性能好

<script>
export default {
  data(){
    return {
      arr: ['A','B','C','D','E']
    }
  },
  methods: {
    forEachBtn(){
      this.arr.forEach((item,index) => {
        if(item === 'B'){
          console.log("forEach循环:",index,item);
          return true;
        }
        console.log("forEach循环:",index,item);
      });
    },
    someBtn(){
      this.arr.some((item,index)=>{
       if(item === 'B'){
          console.log("some循环:",index,item);
          // 当满足条件要退出时,必须写return true
          return true;
        }
        console.log("some循环:",index,item);
      })
    }
  }
}
</script>

⑤ 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入门基础
XMY021016的博客
02-17 1360
Vue快速入门 1、Vue概述 (1) 什么是Vue vue是一套用于快捷开发前端应用的框架技术。它的特点用于构建用户界面的前端渐进式框架,采用自底向上的逐层应用,只关于视图层,技术简单易于上手。 (2)Vue和其他框架 使用vue可以实现视图页面上的组件重复使用,提高了开发和维护的效率!同时优化了页面的加载和 渲染的效率,提高了用户体验。 --React: 重量级框架,一般中大型项目、大厂会直接使用React技术开发项目 封装较为彻底,定制化功能较差,需要有一定的技术门槛 运行时性能得到
Vue全家桶(Vue基础看这篇就够了)
qq_63533863的博客
04-17 9648
第一章:vue核心 1.1.Vue 简介 1.1.1 官网 1.英文官网:Vue.js - The Progressive JavaScript Framework | Vue.js 2.中文官网:Vue.js 1.1.2 Vue是什么? 一套用于构建用户界面的渐进式Javascript框架 作者:尤雨溪 1.1.3 Vue的特点 1.采用组件化模式,提高代码复用率、且让代码更好维护 2.声明式代码,让编码人员无需直接操作DOM,提高开发效率 3...
vue教程-入门学习-进阶
04-03
一个学习Vue的笔记及心得
Vue教学(还是保姆级)
最新发布
weixin_52423626的博客
08-27 1136
Vue.js通过加载js,实现对页面的快速渲染。vue封装的js该如何使用?就必须了解MVVM双向数据绑定模式。Vue将视图层和数据层分离,通过MVVM建立视图层和数据层的连接。其中,插值表达式是一种连接方式,可以通过插值表达式以多种方式,快速的从数据层获取数据并展示在视图层上。数据层Vue对象,也是由很多部分组成,比如之前介绍的el,data,methods等,以及之后要介绍的mount,computed等。计算属性的重点突出在 属性两个字上(属性是名词),
Vue 基础入门
我的的博客哦
05-17 1万+
🔰Vue 是 一 套用于动态构建用户界面的渐进式JavaScript框架。🔰特点:采用组件化模式,提高代码复用率,且让代码更好维护。声明式编码,让编码人员无需直接操作DOM,提高开发效率。使用虚拟DOM+优秀的Diff算法,尽量复用DOM节点。
Vue入门
m493096871的博客
07-02 416
npm install -g cnpm --registry=https://registry.npm.taobao.org cnpm install --global vue-cli vue init webpack my-project cd my-project cnpm install npm run dev data 中return 的都是用到的定义的数...
Vue入门教程
Zz1366的博客
05-08 7319
Vue快速入门
Vue - 快速入门,这一套就够了!(Vue core + 案例 + 效果演示)
热门推荐
CYK_byte的博客
10-16 2万+
前置条件:掌握 HTML、CSS、JavaScript、AJAX.工具:VsCode.插件:Live Server(浏览器实时预览)Ps:建议都提前下载下来,没网的时候也能用.
Weex入门一篇就够
02-24
(1)安装nodejs(2)安装webpack:npminstallwebpack-g(3)安装vue-cli脚手架:npminstallvue-cli-g(1)vueinitwebpackvue-hello(vue-hello为项目名称)(2)cdvue-hello(3)npminstall(4)npmrundev或npmstart...
vue-element-admin(基础篇)
独滕的博客
05-05 8132
vue-element-admin(基础篇) vue-element-admin 是一个后台前端解决方案,它基于 vue 和 element-ui实现。它使用了最新的前端技术栈,内置了 i18 国际化解决方案,动态路由,权限验证,提炼了典型的业务模型,提供了丰富的功能组件,可以快速搭建企业级中后台产品原型 目录结构 ├── build // 构建相关   ├── config // 配置相关 ├── src
Vue3基础看这一篇就够了(万字长篇,附实例代码及效果演示)
yjwlike的博客
11-18 1万+
vue3已经出了好长一段时间了,最近闲来无事简单学习了一下,新增的东西还是挺多的,写一篇文章来记录一下。谈到vue3,首先想到的就是组合式api,很大程度的解决了vue2选项式api的缺点,那有啥缺点?当文件中的业务代码非常多的时候,阅读修改代码的时候是非常痛苦的,data,method,watch还有计算属性之间来回跳转, 我已经准备拔刀了。下面这些图被疯转,很形象的展现了vue2和vue3的区别,可以看到。
Vue新手入门指南(易懂)
liuzhaoh的博客
03-01 1万+
Vue.js学习心得 前言 对于一名初入编程的新手来说,JavaScript的语法偏向复杂,选择Vue库可以说是一个较为不错的体验。在很多方面,Vue简化了JavaScrip语法,并且实现数据与视图的双向绑定,达到响应式页面的目的。 1. Vue实例和模板语法 <body> <div id="app"> <p>{{message}}</p> </div> <script> new Vue({ el:'#app'
vue生命周期转
浅夏博客
10-20 329
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Doc
Vue基础(一)——入门
pro1822的博客
04-25 8783
Vue基础(一)——入门
vue基础入门
weixin_58470558的博客
05-13 6797
vue基础、指令、过滤器、监听器、计算属性、vue-cli、vue组件
vue基础(初学者必备)
wsDaLong的博客
10-22 1497
1.双向绑定, 2.组件化开发,(代码复用), 3.模板语法:{{}},vue指令,修饰符,过滤器(工具函数) 4.条件语句:v-if和v-show, (1)v-if的原理是根据判断条件来动态的进行增删DOM元素, (2)v-show是根据判断条件来动态的进行显示和隐藏元素。 (3)v-for比v-if优先级高, 5.watch 和 computed 和 methods 区别是什么? (1)当页面中有某些数据依赖其他数据进行变动的时候,可以使用computed(计算属性)。computed是具有缓存的, (
vue学习-vue入门
08-25
你好!如果你想学习 Vue.js入门的话,以下是一些步骤和资源可以帮助你开始: 1. 首先,确保你已经安装了 Node.js。你可以在官方网站上下载并按照指示进行安装。 2. 之后,你可以使用 Vue 的官方脚手架工具 Vue CLI 来创建一个新的 Vue 项目。在命令行中运行以下命令来安装 Vue CLI: ``` npm install -g @vue/cli ``` 3. 创建一个新的 Vue 项目。在命令行中运行以下命令,并按照提示进行配置: ``` vue create my-project ``` 4. 进入项目文件夹并启动开发服务器: ``` cd my-project npm run serve ``` 运行成功后,你可以在浏览器中访问 `http://localhost:8080` 来查看你的应用程序。 5. 现在你已经创建了一个基本的 Vue 项目,你可以开始学习 Vue基础知识。Vue 的官方文档是一个非常好的资源,可以帮助你了解 Vue 的核心概念和语法。你可以在官方网站上找到详细的文档:https://vuejs.org/ 6. 另外,还有很多在线教程和视频可以帮助你学习 Vue。一些受欢迎的资源包括 Vue Mastery(https://www.vuemastery.com/)和 Vue School(https://vueschool.io/)。这些资源提供了逐步指导和实际示例,可以帮助你更好地理解和应用 Vue。 希望这些信息对你有帮助!如果你有任何进一步的问题,请随时问我。
写文章

热门文章

  • Vue 基础入门 - 看这一篇就够了!!! 5863
  • Vue2.0 购物车案例 944
  • Vue-2 本地应用 304
  • Vue-1 入门基础 211
  • Vue-3 网络应用 118

分类专栏

  • 前端 5篇
  • Oracle

大家在看

  • 基于nodejs+vue基于Springboot的助学金管理系统设计与实现[开题+源码+程序+论文]计算机毕业设计
  • 基于nodejs+vue基于Springboot的中点游戏分享网站[开题+源码+程序+论文]计算机毕业设计
  • 基于nodejs+vue基于Springboot的专业技能认证系统[开题+源码+程序+论文]计算机毕业设计

最新文章

  • Vue2.0 购物车案例
  • Vue-3 网络应用
  • Vue-2 本地应用
2022年5篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

深圳坪山网站建设公司林芝模板网站优化平台郑州移动网站优化公司口碑好企业免费网站优化公司有哪些上海网站竞价优化怎么收费修武一站式网站搭建优化商丘百度网站优化服务商长沙新站网站推广优化成都规模大的传统行业网站优化网站优化收录量企业网站seo优化交流集美网站优化哪家好网站标题优化软件东莞seo网站优化哪家快网站优化推广营销价格江苏省网站优化收费网站支付优化雅安网站优化靠谱公司江门百度网站快速优化网站怎样关键词排名优化许昌网站优化推广联系方式滨海网站排名优化企业网站优化推广营销报价优化公司网站认可t火28星漳州网站关键字优化网站存在什么问题时需要优化分析网站制订优化目标168优化重组网站南阳网站推广优化公司保定网站搜索优化排名哪家好三只松鼠网站优化策略香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

深圳坪山网站建设公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化