vue基本语法总结大全

news2024/11/28 2:51:49

vue基本语法

文章目录

  • vue基本语法
    • 基本用法
    • 内容渲染指令
    • 属性绑定指令
    • 使用js表达式
    • 事件绑定指令
    • 条件渲染指令
    • v-else和v-else-if指令
    • 列表渲染指令
    • v-for中的key
  • 组件化开发
    • 安装
    • 详细讲解
  • 第三方组件
    • 1. 组件间的传值
    • 2. element-ui介绍
    • 3. 组件的使用
    • 4. 图标的使用
  • Axios网络请求
    • 1. Axios的使用
    • 2. 与vue的整合
    • 3. 跨域
  • 前端路由VueRouter
    • 1. VueRouter安装与使用
    • 2. 参数传递
    • 3.子路由
  • 状态管理VueX
    • 1. Vuex介绍
    • 2. 状态管理

基本用法

  1. 导入vue的脚本文件
  2. 声明要被vue所控制的DOM区域
  3. 创建vue的实例对象

内容渲染指令

<p> {{desc}} </p>
<p v-html="desc"> </p>

第二种可以渲染html页面

v-model: 双向绑定

属性绑定指令

<a v-bind:href="link">百度</a>
<a :href="link">百度</a>

可以简写

使用js表达式

<p>{{number + 1}}</p>
<p :id="'list-'+id">xxx</p>

里面只能是表达式或者变量

事件绑定指令

<button v-on:click="addCount">点击</button></button>
<button @click="count+=1">+1</button></button>

里面可以是表达式或者方法

条件渲染指令

<p v-if="flag"> 请求成功 </p>

如果为false,标签就不会被创建;性能差一点

<p v-show="flag"> 请求成功 </p>

如果为false,标签会被创建,但不会显示display:none;性能好,用于标签被频繁切换

v-else和v-else-if指令

<p v-if="type=='A'">优秀</p>

判断指令,v-else-if可以有多个

列表渲染指令

<ul>
  <li v-for="(user,i) in userList">索引是:{{i}},姓名是:{{user.name}}     </li>
</ul>

userList是一个集合;

(user,i)可以是一个参数,也可以是两个参数;

v-for中的key

<ul>
  <li v-for="(user,i) in userList" :key="index">索引是:{{i}},姓名是:{{user.name}}     </li>
</ul>

每个v-for要加一个key标签,用来当唯一索引

如果设置为index,当list头部添加一个数据,原来数据勾选0,新增数据添加后也变为0,会勾选为新增数据,所以,一般会将数据库查询出的id设置为key值

  • 索引是:{{i}},姓名是:{{user.name}}

组件化开发

  • NPM: 是nodeJS包管理和分发的工具。最常用法就是用于安装和更新依赖。

​ 安装命令:npm install

  • vue cli: vue官方提供的构建工具。基于webpack构建,也可以根据项目内的配置文件进行配置。

​ 安装命令:npm install -g @vue/cli

​ -g:代表全局安装

安装

vue create 项目名

在这里插入图片描述

第一二项分别为vue3和vue2,eslint会强制检查语法风格,学习初期用这个会出现各种问题。所以选择 最后一个选项(手动选择功能 将LISTER按空格取消掉)。

然后将项目拖入vscod。

详细讲解

在这里插入图片描述

文件格式如上:

package.json:记录项目的信息

main.js:程序的入口文件,创建了vue的vm对象。

其他是vue的组件

APP.vue: 是一个根组件。里面的内容会被渲染到

的index.html界面中;因为main里面将APP.vue与#app进行了绑定

运行: 在package.json 中找到scripts中的指令

​ 然后 npm run serve

  • vue主要用到了模块化:

​ 通过import来导入各种模块,来完成前端代码的组件。

  • 组件化开发:

​ 组件是vue.js最强大的功能之一。组件可以扩展HTML元素,封装可重用的代码。

​ vue的组件系统允许我们使用小型、独立和通常可复用的组件构建大型应用。

​ 组件里面也可以有组件。

组件的构成:

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

  2. 每个 .vue 组件都由 3部分构成,分别是

    template,组件的模板结构,可以包含HTML标签及其他的组件

    script,组件的 JavaScript 代码

    style,组件的样式

第三方组件

1. 组件间的传值

  • 组件可以由内部的Data提供数据,也可以由父组件通过props方式传值给子组件

  • 兄弟组件之间可以通过vuex等同意数据源提供数据共享

2. element-ui介绍

饿了么公司开源的前端框架,简洁优雅,提供了vue,react,angular等多个版本

文档地址:https://element.eleme.cn/#/zh-CN/
安装:npm i element-ui

-S:同时将element-ui 记录到package.json文件中,可以省略,也会记录

下载的源码会放在node_modules文件夹,这个文件不会进行传递。

网上下载的源码需要从package.json中再下载第三方模块,需要运行 :npm install

3. 组件的使用

4. 图标的使用

  • 由于Element U!提供的字体图符较少,一般会采用其他图表库,如著名的Font
    Awesome

  • 文档地址:http: //fontawesome.dashgame.com/

  • 安装:npm install font-awesome

  • 使用:import ‘font-awesome/css/font-awesome.min.css’

    <i class="fa fa-camera-retro"></i> fa-camera-retro
    

vue2中所有组件都必须包含在一个父标签下(要有一个总包含的标签),vue3没有限制

Axios网络请求

1. Axios的使用

  • 在实际项目开发中,前端页面所需要的数据往往需要从服务器端获取,这必然
    涉及与服务器的通信。

  • Axios 是一个基于 promise 网络请求库,作用于nodejs 和浏览器中。

  • Axios 在浏览器端使用XMLHttpRequests发送网络请求,并能自动完成JSON
    数据的转换。

  • 安装:

  • 地址:https://www.axios-http.cn/

  • 导入

import axios from 'axios'

​ 发送post请求

​ 异步回调: 同步方式(async/await成对出现) ; 异步方式(.then(function(response)))常用

​ 其他请求方式

2. 与vue的整合

vue中的方法:

  • created :组件被创建时调用 比如http请求

  • mounted : 组件被挂载/渲染完毕调用

  //异步回调
  axios.get("http://localhost:8888/user").then(  (response) => {
    //异步回调作用域会发生编发 function(response){}会产生作用域问题
    //采用新版本这种(response)=> 的作用域继承于父类
      console.log(response);
      this.tableData =response.data
  });

在实际项目中,通过全局配置方式来调用axios请求

// 配置请求根路径
axios.defaults.baseURL ='http://api.com'

//将axios 作为全局的自定义属性,每个组件可以在内部直接访问 (Vue3)
app.config.globa1Properties. Shttp = axios

//将axios 作为全局的自定义属性,每个组件可以在内部直接访问 (Vue2)
Vue.prototype.$http = axios

3. 跨域

浏览器会有同源策略,这是浏览器核心也是最基本的安全功能

同源是指两个页面要有相同的协议,主机,端口号

当一个请求的协议、域名、端口三者任意一个与当前页面url不同即为跨域,此时无法读取非同源网页的cookie,无法向非同源地址发送AJAX请求

  • 解决方法:

    CORS:W3C制定的一种跨域资源共享技术标准,就是为了解决跨域问题

    cors将请求分为两类:

    简单请求

    ​ 满足以下条件的请求即为简单请求:
    ​ 请求方法:GET、 POST、 HEAD
    ​ 除了以下的请求头字段之外,没有自定义的请求头:
    ​ Accept. Accept-Language、 Content-Language、 Last-Event-ID、Content-Type
    ​ Content-Type的值只有以下三种:
    ​ text/plain、 multipart/form-data、 application/x-www-form-urlencoded

    ​ 处理方法:http请求头添加Access-Control-Allow-Origin:http://localhost:8080 字段(后端接口)

    非简单请求

    ​ 非简单请求,会在真实请求发出前增加一次OPTION请求,称为预检请求

    ​ 预检请求将真实请求的信息,包括请求方法,自定义头字段,源信息添加到HTTP头信息字段中,询问服务器是否允许这样的操作。服务器会将允许的请求方式等数据放在响应头返回

前端路由VueRouter

1. VueRouter安装与使用

vue路由是官方路由插件。

vue的单页面应用是基于路由和组件的,路由用于设定访问路径,并将路径和组件映射起来。

vue-route 3.x只能结合vue2进行使用,vue-route 4.x只能结合vue3进行使用。

安装

npm install vue-router@4

创建路由组件

  • 在项目中定义Discover.vue、Friends.vue、My.vue三个组件,将来要使用vue-router来控制它们的展示与切换:

Discover.vue:

<template>
    <div>
        <h1>发现音乐</h1>
    </div>
</template>

Friends.vue:

<template>
    <div>
        <h1>关注</h1>
    </div>
</template>

My.vue:

<template>
    <div>
        <h1>我的音乐</h1>
    </div>
</template>

声明路由链接和占位标签

  • 可以使用标签来声明路由链接,并使用标签来声明路由占位符。

App.vue:

<template>
  <div id="app">
    <!-- 声明路由链接 -->
    <router-link to="/discover">发现音乐</router-link>
    <router-link to="/my">我的音乐</router-link>
    <router-link to="/friends">关注</router-link>

    <!-- 声明路由占位符 -->
    <router-view></router-view>
  </div>
</template>

创建路由模块

在项目中创建index.js模块,加入以下代码:

import Vue from "vue";
import VueRouter from "vue-router";
import Discover from '../components/Discover.vue'
import Friends from '../components/Friends.vue'
import My from '../components/My.vue'


Vue.use(VueRouter)



const router = new VueRouter({
    // 指定hash属性与组件的对应关系
    routes: [
        { path: '/', redirect: "/discover" },
        { path: '/discover', component: Discover },
        { path: '/friends', component: Friends },
        { path: '/my', component: My }
    ]
})

export default router

挂载路由模块

在main.js中导入并挂在router

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

Vue.config.productionTip = false


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

路由重定向

  • 路由重定向指的是:用户在访问地址A的时候,强制用户跳转到地址C,从而展示特定的组件页面
  • 通过路由规则的redirect属性,指定一个新的路由地址,可以很方便地设置路由的重定向:
const router = new VueRouter({
    // 指定hash属性与组件的对应关系
    routes: [
        { path: '/', redirect: "/discover" },
        { path: '/discover', component: Discover },
        { path: '/friends', component: Friends },
        { path: '/my', component: My }
    ]
})

嵌套路由

  • 在Discover.vue组件中,声明toplist和playlist的子路由链接以及子路由占位符。示例代码如下:
<template>
  <div>
    <h1>发现音乐</h1>
    <!-- 子路由链接 -->
    <router-link to="/discover/toplist">推荐</router-link>
    <router-link to="/discover/playlist">歌单</router-link>
    <hr />
    <router-view></router-view>
  </div>
</template>
  • 在 src/router/index.js路由模块中,导入需要的组件,并使用 children 属性声明子路由规则:
const router = new VueRouter({
    // 指定hash属性与组件的对应关系
    routes: [
        { path: '/', redirect: "/discover" },
        {
            path: '/discover',
            component: Discover,
            children: [
                { path: 'toplist', component: Toplist },
                { path: 'playlist', component: Playlist },
            ]
        },
        { path: '/friends', component: Friends },
        { path: '/my', component: My }
    ]
})

动态路由

  • 动态路由是指:把Hash地址中可变的部分定义为参数项,从而提高路由规则的复用性。在vue-router中使用英文冒号(:)来定义路由的参数项。示例代码如下:
{path: ':id', component: Project}
  • 通过动态路由匹配的方式渲染出来的组件中,可以使用 $route.params 对象访问到动态匹配的参数值,比如在商品详情组件的内部,根据id值,请求不同的商品数据
    <template>
        <div>
            <h3>商品{{$route.params.id}}</h3>
        </div>
    </template>
  • 为了简化路由参数的获取形式,vue-router 允许在路由规则中开启 props 传参。示例代码如下:
{ path: ':id', component: Project, props: true }
<template>
  <div>
    <!-- 获取动态id值 -->
    <h3>商品{{ id }}</h3>
  </div>
</template>

<script>
  export default {
    props: ["id"],
  };
</script>
  • 编程式导航

声明式:

编程式:router.push(…)

除了使用 创建a 标签来定义导航链接,我们还可以借助 router 的实例方法,通过编写代码来实现。
想要导航到不同的 URL,则使用 router.push 方法。这个方法会向 history 栈添加一个新的记录,所以,当用户点击浏览器后退按钮时,则回到之前的 URL。
当你点击 〈router-1ink> 时,这个方法会在内部调用,所以说,点击 <router-link :to=".…“>等同于调用 router.push(.…)。

<template>
    <button @click="gotoProduct(2)" > 跳转到商品2</button >
</template >

 <script>
        export default{
            methods:{
                gotoProduct: function(id) {
                    this.$router.push('/movie/${id}')
                }
            }
        }
 </script>

导航守卫

  • 导航守卫可以控制路由的访问权限。
  • 全局导航守卫会拦截每个路由规则,从而对每个路由进行访问权限的控制
  • 可以使用router,beforeEach注册一个全局前置守卫:
router.beforeEach(to,from,next) =>{
    if(to.path==='/main'&&!isAuthenticated)
        next('/login')
    }else{
        next()
    }
})
  • to:即将要进入的目标

  • from:当前导航正要离开的路由

  • 在守卫方法中如果声明了 next 形参,则必须调用 next()函数,否则不允许用户访问 任何—个路由!
    直接放行:next()
    强制其停留在当前页面: next(false)
    强制其跳转到登录页面:next(/login’)

2. 参数传递

3.子路由

状态管理VueX

1. Vuex介绍

Vue兄弟组件之间数据传递十分麻烦,许多框架提供了解决方案-使用全局的状态管理器,将所有分赛的共享数据交由状态管理器保管,Vue也不例外。

Vuex用于管理分散在Vue各个组件中的数据,采用集中式存储管理响应用的所有组件状态。

  • 安装
npm install vuex@next

有两个版本 vue2 - vuex3 ; vue3 - vuex4

2. 状态管理

  • 每一个Vuex应用的核心都是一个store,与普通的全局对象不同的是,基于Vue
    数据与视图绑定的特点,当store中的状态发生变化时,与之绑定的视图也会被
    重新渲染。
  • store中的状态不允许被直接修改,改变store中的状态的唯一途径就是显式地
    提交(commit)mutation,这可以让我们方便地跟踪每一个状态的变化。
  • 在大型复杂应用中,如果无法有效地跟踪到状态的变化,将会对理解和维护代
    码带来极大的困扰。
  • Vuex中有5个重要的概念:State、Getter、 Mutation、 Action、 Module。

status

​ status用于维护所有应用层的状态,并确保应用只有唯一的数据源。

​ 在组件中,可以直接使用this.$store.state.count访问数据,也可以先用mapState辅助函数将其映射下来

Mutation

​ Mutation提供修改state状态的方法。

​ 在组件中,可以直接使用store.commit来提交mutation(同步的)

​ 也可以先用mapMutation辅助函数将其映射下来

Action
Action类似Mutation,不同在于

​ Action不能直接修改状态,只能通过提交mutation来修改,Action可以包含异步操作

​ 在组件中,可以直接使用this.$store.dispatch(xxx)分发 action,或者使用mapActions辅助函数先将其映射下来

Getter

​ Getter维护由State派生的一些状态,这些状态随着state状态的变化而变化。

​ 在组件中,可以直接使用this.$store.getters.doneTodos,也可以先用
mapGetters辅助函数将其映射下来:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1432830.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis-缓存问题及解决方案

本文已收录于专栏 《中间件合集》 目录 概念说明缓存问题缓存击穿问题描述解决方案 缓存穿透问题描述解决方案 缓存雪崩问题描述解决方案提高缓存可用性过期时间配置熔断降级 总结提升 概念说明 Redis是一个开源的内存数据库&#xff0c;也可以用作缓存系统。它支持多种数据结构…

网络攻防模拟与城市安全演练 | 图扑数字孪生

在数字化浪潮的推动下&#xff0c;网络攻防模拟和城市安全演练成为维护社会稳定的不可或缺的环节。基于数字孪生技术我们能够在虚拟环境中进行高度真实的网络攻防模拟&#xff0c;为安全专业人员提供实战经验&#xff0c;从而提升应对网络威胁的能力。同时&#xff0c;在城市安…

UE中对象创建方法示例和类的理解

对象创建方法示例集 创建Actor示例 //创建一个护甲道具 AProp* armor GetWorld()->SpawnActor<AProp>(pos, rotator); 创建Component示例 UCapsuleComponent* CapsuleComponent CreateDefaultSubobject<UCapsuleComponent>(TEXT("CapsuleComponent&qu…

【HarmonyOS应用开发】HTTP数据请求(十四)

文章末尾含相关内容源代码 一、概述 日常生活中我们使用应用程序看新闻、发送消息等&#xff0c;都需要连接到互联网&#xff0c;从服务端获取数据。例如&#xff0c;新闻应用可以从新闻服务器中获取最新的热点新闻&#xff0c;从而给用户打造更加丰富、更加实用的体验。 那么…

【Linux网络编程三】Udp套接字编程网络应用场景

【Linux网络编程三】Udp套接字编程网络应用场景 应用场景一&#xff1a;远程命令执行应用场景二&#xff1a;与Windos端相互通信应用场景三&#xff1a;简单聊天1.多线程化2.输入输出分开 应用场景一&#xff1a;远程命令执行 简单的服务器上一篇已经完成&#xff0c;接下来我…

前端小案例——动态导航栏文字(HTML + CSS, 附源码)

一、前言 实现功能: 这案例是一个具有动态效果的导航栏。导航栏的样式设置了一个灰色的背景&#xff0c;并使用flex布局在水平方向上平均分配了四个选项。每个选项都是一个li元素&#xff0c;包含一个文本和一个横向的下划线。 当鼠标悬停在选项上时&#xff0c;选项的文本颜色…

flask+pyinstaller实现mock接口,并打包到exe运行使用postman验证

flask代码 from flask import Flask, request, jsonifyapp Flask(__name__)app.route("/login", methods[POST]) def login():username request.json.get("username").strip() # 用户名password request.json.get("password").strip() # 密…

FastAdmin青动CRM-E售后

应用介绍 一款基于FastAdminThinkPHP和uniapp开发的CRM售后管理系统&#xff0c;旨在助力企业销售售后全流程精细化、数字化管理&#xff0c;主要功能&#xff1a;客户、合同、工单、任务、报价、产品、库存、出纳、收费&#xff0c;适用于&#xff1a;服装鞋帽、化妆品、机械机…

随机森林超参数的网格优化(机器学习的精华--调参)

随机森林超参数的网格优化&#xff08;机器学习的精华–调参&#xff09; 随机森林各个参数对算法的影响 影响力参数⭐⭐⭐⭐⭐几乎总是具有巨大影响力n_estimators&#xff08;整体学习能力&#xff09;max_depth&#xff08;粗剪枝&#xff09;max_features&#xff08;随机…

STM32--SPI通信协议(3)SPI通信外设

前言 硬件SPI&#xff1a;通过硬件电路实现&#xff0c;所以硬件SPI速度更快&#xff0c;有专门的寄存器和 库函数 &#xff0c;使用起来更方便。 软件SPI&#xff1a;也称模拟SPI&#xff0c;通过程序控制IO口电平模拟SPI时序实现&#xff0c;需要程序不断控制IO电平翻转&am…

网工每日一练(2月4日)

试题1 通过HFC网络实现宽带接入&#xff0c;用户端需要的设备是&#xff08;A&#xff09;&#xff0c;局端用于控制和管理用户的设备是&#xff08;D&#xff09;。 &#xff08;1&#xff09;A.Cable Modem B.ADSL Modem C.OLT D.CMTS &#xff08;2&#xff09;A. Cable Mo…

代码编辑器1.9.0

多线程&#xff01;&#xff01;&#xff01; #include <winsock2.h> #include <windows.h> #include <iostream> #include <stdlib.h> #include <string.h> #include <fstream> #include <conio.h> #include <stdio.h> #incl…

实现屏蔽 Ctrl + Alt + Del 、Ctrl + Shift + Esc 等热键(二)

目录 前言 一、概述 Winlogon 的 RPC 例程 二、Handler 函数的消息处理机制 三、讨论如何安全执行 HOOK 代码 3.1 挂钩例程解决方案 3.2 脱钩例程解决方案 3.3 钩子例程解决方案 3.4 地址信息查询函数 3.5 简单保护加载的模块 四、模块如何安全地注入&#xff1f; 4…

泡泡清新文艺的微社区系统PHP源码

泡泡微社区&#xff0c;小巧而强大&#xff0c;为您带来卓越的社区交流体验。 凭借GoZinc的先进架构&#xff0c;泡泡在保持轻盈身姿的同时&#xff0c;功能一应俱全。前端采用Vue3匠心打造&#xff0c;界面清新简约&#xff0c;三栏式布局仿若Twitter&#xff0c;让您一见倾心…

前端开发中不同语言【react-i18next】

目录 查看并设置语言 单页面&#xff1a;html lang ​编辑 浏览器 自定义翻译&#xff1a;react-i18next 设置 模块&#xff1a;staticData.ts 散(重复利用)&#xff1a;命名空间.json 应用 准备 html标签 查看并设置语言 单页面&#xff1a;html lang 英语: <…

Fink CDC数据同步(五)Kafka数据同步Hive

6、Kafka同步到Hive 6.1 建映射表 通过flink sql client 建Kafka topic的映射表 CREATE TABLE kafka_user_topic(id int,name string,birth string,gender string ) WITH (connector kafka,topic flink-cdc-user,properties.bootstrap.servers 192.168.0.4:6668…

合体积木

欢迎来到程序小院 合体积木 玩法&#xff1a;点击积木移动&#xff0c;将积木合并一起&#xff0c;移动步数越少获得⭐️⭐️越多&#xff0c; 共52关卡&#xff0c;每关卡都有不同的积木摆放&#xff0c;快去闯关吧^^。开始游戏 html <canvas id"gameCanvas" w…

多播路由选择

目录 1 多播路由选择 1.1 转发多播数据报时使用三种方法 (1) 洪泛与剪除 RPB 的要点&#xff1a; 1.检查&#xff0c;转发 2.形成以源为根节点的多播转发树 3.剪枝与嫁接 (2) 隧道技术 (tunneling) (3) 基于核心的发现技术 1.2 几种多播路由选择协议 1 多播路由选择 …

C++实战Opencv第二天——色彩空间转换函数和opencv中图像对象创建与赋值(从零开始,保姆教学)

OpenCV是一个强大的计算机视觉库&#xff0c;使用C作为主要编程语言&#xff0c;对于图像处理和计算机视觉领域具有重要意义。其提供了丰富的功能和算法&#xff0c;使得开发者能够快速实现各种图像处理和计算机视觉应用。OpenCV C为图像处理和计算机视觉领域的开发者提供了一个…

前端JavaScript篇之JavaScript 类数组对象的定义?如何将类数组对象转换为真正的数组

目录 JavaScript 类数组对象的定义&#xff1f;如何将类数组对象转换为真正的数组如何将类数组对象转换为真正的数组 JavaScript 类数组对象的定义&#xff1f;如何将类数组对象转换为真正的数组 类数组对象指的是具有类似数组结构&#xff08;类似于数组的属性或方法&#xf…