Vue学习笔记

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

一、安装Vue工具 Vue CLI

  • Vue Cli Vue开发的标准工具,基于Vue.js进行快速开发的完整系统

npm install -g @vue/cli

  • 检查在cmd中输入检验是否安装成功

vue --version

  • 创建项目

vue create vue-demo

vue-demo是项目名,在控制台中,可以用上下按键调整选择项,在控制台中,可以用空格(spacebar)选择是否选中和取消选中。

在这里插入图片描述
在这里插入图片描述

  • Vue开发模式 MVVM
    在这里插入图片描述
  • 模板语法(插值表达式)
    数据绑定最常见的形式就是使用“Mustache” (双大括号) 语法的文本插值。
<span>Message: {{ msg }}</span>
	export default {
	 name: 'HelloWorld',
	 data(){
	  return{
	   msg:"消息提示"
	   }
	  }
	}

  • 指令
    插值表达式只能将数据显示在标签中。但是如果将data数据显示在 标签的属
    性中,插值表达式不能使用。
input type="text" value="{{name}}" /> 错误。
<span>{{name}}</span> 正确。

插值表达式再快速刷新页面的时候,会有闪烁的问题。v-text和v-html可以解决闪烁问题。
Mustache 语法不能在 HTML 属性中使用,然而,可以使用 v-bind或者 v-html指令。

  • v-text 和 v-html指令
<!-- 插值表达式取法 -->
<h1>{{name}}</h1>
<!-- v-text指令的取法 -->
<h1 v-text="name"></h1>
<div v-bind:id="dynamicId"></div>

data(){
  return{
    dynamicId:1001
   }
}

为了输出真正的 HTML,你需要使用v-html 指令

<p>Using mustaches: {{ rawHtml }}</p>
<p>Using v-html directive: <span v-html="rawHtml"></span></p>

data(){
  return{
    rawHtml:"<a href='https://www.itbaizhan.com'>百战</a>"
   }
}

注意:
在这里插入图片描述

  • 条件渲染
    v-if 指令用于条件性地渲染一块内容。这块内容只会在指令的表达式返回 true 值的时候被渲染。
<p v-if="flag">我是孙猴子</p>

data() {
  return {
    flag: true
   }
}

  • v-else
    v-else 指令来表示 v-if 的“else 块”
<p v-if="flag">我是孙猴子</p>
<p v-else>你是傻猴子</p>

data() {
  return {
    flag: false
   }
}

  • v-show
    另一个用于条件性展示元素的选项是 v-show 指令
  • v-if vs v-show 的区别
    v-if 是“真正”的条件渲染,因为它会确保在切换过程中,条件块内的事件监听器和子组件适当地被销毁和重建。

v-if 也是惰性的:如果在初始渲染时条件为假,则什么也不做——直到条件第一次变为真时,才会开始渲染条件块。

相比之下,v-show 就简单得多——不管初始条件是什么,元素总是会被渲染,并且只是简单地基于 CSS 进行切换。

一般来说,v-if 有更高的切换开销,而 v-show 有更高的初始渲染开销。因此,如果需要非常频繁地切换,则使用 v-show 较好;如果在运行时条件很少改变,则使用 v-if 较好

  • 列表渲染

用 v-for 把一个数组映射为一组元素, v-for 指令基于一个数组来渲染一个列表。v-for 指令需要使用 item in items 形式的特殊语法,其中 items 是源数据数组,而 item 则是被迭代的数组元素的别名。

<ul>
  <li v-for="item in items">{{ item.message }}</li>
</ul>

data() {
  return {
    items: [{ message: 'Foo' }, { message: 'Bar' }]
   }
}

  • 维护状态

当 Vue 正在更新使用 v-for 渲染的元素列表时,它默认使用“就地更新”的策略。如果数据项的顺序被改变,Vue 将不会移动 DOM 元素来匹配数据项的顺序,而是就地更新每个元素,并且确保它们在每个索引位置正确渲染。

为了给 Vue 一个提示,以便它能跟踪每个节点的身份,从而重用和重新排序现有元素,你需要为每项提供一个唯一的 key attribute:

<div v-for="(item,index) in items" :key="item.id|index">
 <!-- 内容 -->
</div>

  • 绑定事件
    在这里插入图片描述

  • Vue中监听事件
    在这里插入图片描述

  • 事件处理方法
    许多事件的处理逻辑会很复杂,所以直接把JavaSript代码写在v-on指令中是不可行的。因此v-on还可以接受一个调用方法名称。
    在这里插入图片描述
    注意:
     v-on绑定事件是在项目中经常使用。所以可以进行简写。
    v-on:click 绑定单击事件 是可以简写为 @click,在项目编程中,全部使用简写。

表单输入绑定

  • v-model指令实现就是双向的数据绑定。数据可以从M到V,也可以从V到M。
  • v-model不是所有的HTML标签都可以使用,只能在表单标签中使用(数据必须在页面
    上能够修改)。
  • 表单标签:文本框、密码框、单选、复选、下拉列表、多行文本框…
    v-model修饰符:
    在这里插入图片描述
    在这里插入图片描述
  • 修饰符
    .lazy:
    在默认情况下,v-model 在每次 input 事件触发后将输入框的值与数据进行同步 。你可以添加 lazy 修饰符,从而转为在 change 事件之后进行同步。
    在这里插入图片描述
    .trim
    在这里插入图片描述
    如果要自动过滤用户输入的首尾空白字符,可以给 v-model 添加 trim 修饰符

组件基础

	如果要自动过滤用户输入的首尾空白字符,可以给 v-model 添加 trim 修饰符

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

组件之间的通信

在这里插入图片描述
在这里插入图片描述

组件生命周期

每个组件在被创建时都要经过一系列的初始化过程——例如,需要设置数据监听、编译模板、将实例挂载到 DOM 并在数据变化时更新 DOM 等。同时在这个过程中也会运行一些叫做生命周期钩子的函数,这给了用户在不同阶段添加自己的代码的机会。

在这里插入图片描述
在这里插入图片描述

Axios网络请求

在这里插入图片描述
在这里插入图片描述

  //局部axios get请求
    axios({
      method:'get',
      url:"/api?type=yule&page=1&page_size=3&is_filter=1&key=28b45371e287872fbae2484fe78c6669",
    }).then(res =>{
      if (res!=null){
        console.log(res.data.reason)
        console.log(res.data.result.data)
      }
    })

    //局部post请求
    axios({
      method:"post",
      url:"/api",
      data:qs.stringify({
        type:'top',
        page:1,
        page_size:50,
        is_filter:1,
        key:'28b45371e287872fbae2484fe78c6669'
      })
    }).then(res=>{
       console.log(res)
    })

简洁写法:

  //局部axios get请求
    axios({
      method:'get',
      url:"/api?type=yule&page=1&page_size=3&is_filter=1&key=28b45371e287872fbae2484fe78c6669",
    }).then(res =>{
      if (res!=null){
        console.log(res.data.reason)
        console.log(res.data.result.data)
      }
    })

    //局部post请求
    axios({
      method:"post",
      url:"/api",
      //需要借助第三方stringify插件工具转换
      data:qs.stringify({
        type:'top',
        page:1,
        page_size:50,
        is_filter:1,
        key:'28b45371e287872fbae2484fe78c6669'
      })
    }).then(res=>{
       console.log(res)
    })

Vue请求跨域

在vue.config.js中配置如下:

const {defineConfig} = require('@vue/cli-service')
module.exports = defineConfig({
  transpileDependencies: true,
  devServer: {
    host: '127.0.0.1',
    port: 8084,
    open: true,//vue项目启动时自动打开浏览器
    proxy: {
      '/api': { // '/api'是代理标识,用于告诉node,url前面是/api的就是使用代理的
        target: "http://v.juhe.cn/toutiao/index",
        changeOrigin: true, //是否跨域
        pathRewrite: { // pathRewrite 的作用是把实际Request Url中的'/api'用""代替
          '^/api': ""
        }
      }
    }
  }
})

Axios网络请求封装

在日常应用过程中,一个项目中的网络请求会很多,此时一般采取的方案是将网络请求封装起来

在src目录下创建文件夹utils,并创建文件request,用来存储网络请求对象 axios。

在这里插入图片描述

import axios from "axios";
import querystring from 'querystring';

//网络请求的公共配置
const instance = axios.create({
    timeout:5000
})

const errorHandle = (status,info) => {
    switch(status){
        case 400:
            console.log("语义有误");
            break;
        case 401:
            console.log("服务器认证失败");
            break;
        case 403:
            console.log("服务器拒绝访问");
            break;
        case 404:
            console.log("地址错误");
            break;
        case 500:
            console.log("服务器遇到意外");
            break;
        case 502:
            console.log("服务器无响应");
            break;
        default:
            console.log(info);
            break;
    }
}

//拦截器的配置
//发送数据之前
instance.interceptors.request.use(
    config =>{
        if (config.method ==='post'){
            config.data = querystring.stringify(config.data);
        }
        //config包含了请求中的所有信息
        return config;
    },
    error => {
        Promise.reject(error);
    }
)

// 接收数据前
instance.interceptors.response.use(
    response => {
        return response.status == 200 ? Promise.resolve(response) : Promise.reject((response));
    },

    error =>{
      const  {response} = error;
      //错误的处理
        errorHandle(response.status,response.info)
    }
)
export default instance;

在src目录下创建文件夹api,并创建文件index和path分别用来存放网络请求方法和请求路径

在这里插入图片描述

//pash.js
const  base = {
    //请求根路径
    bashUrl:"/api",
    // 子路径
    childUrl:'?type=yule&page=1&page_size=3&is_filter=1&key=5a10bce079754877d106880a2c78c550',

}

export default base;

//index.js
import axios from "../utils/requerst";
import pash from "@/api/pash";

const api = {
    //get 获取头条信息
    getTopNews(){
        return axios.get(pash.bashUrl+pash.childUrl)
    },
    postGetNews(){
        return axios.post(pash.bashUrl,{
            type:'top',
            page:1,
            page_size:30,
            is_filter:1,
            key:'5a10bce079754877d106880a2c78c550'
        })
    }
}

export default api;

各个组件中调用方式

import api from "../api/index"


 //封装api 请求接口
    // api.getTopNews().then(res =>{
    //   console.log(res.data.reason)
    //   console.log(res.data.result.data)
    // })
    api.postGetNews().then(res=>{
      if (res!=null){
        console.log(res.data.reason)
        console.log(res.data.result.data)
      }
    })

在这里插入图片描述
在这里插入图片描述

路由传递参数

在这里插入图片描述

Vue状态管理(Vuex)

在这里插入图片描述
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

明天码上有钱啦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值