vue基本语法总结大全

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辅助函数将其映射下来:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Redis渗透SSRF的利用

Redis是什么&#xff1f; Redis是NoSQL数据库之一&#xff0c;它使用ANSI C编写的开源、包含多种数据结构、支持网络、基于内存、可选持久性的键值对存储数据库。默认端口是&#xff1a;6379 工具安装 下载地址&#xff1a; http://download.redis.io/redis-stable.tar.gz然…

【Redis】字符串原理--简单动态字符串SDS

一.SDS定义 free 属性值为0&#xff0c;标识SDS没有分配任何未使用空间。len 属性值为5&#xff0c;标识SDS保存了一个5字节长度的字符串。buf 属性是一个char类型数组&#xff0c;数组的前5个字节保存了&#xff0c;R e d i s 五个字符&#xff0c;最后一个保存空字符串 \0…

网络原理TCP/IP(5)

文章目录 IP协议IP协议报头地址管理网段划分特殊的IP地址路由选择以太网认识MAC地址对比理解MAC地址和IP地址DNS&#xff08;域名服务器&#xff09; IP协议 IP协议主要完成的工作是两方面&#xff1a; 地址管理&#xff0c;使用一套地址体系&#xff0c;来描述互联网上每个设…

Springboot集成Camunda并完成一条流程实例

&#x1f496;专栏简介 ✔️本专栏将从Camunda(卡蒙达) 7中的关键概念到实现中国式工作流相关功能。 ✔️文章中只包含演示核心代码及测试数据&#xff0c;完整代码可查看作者的开源项目snail-camunda ✔️请给snail-camunda 点颗星吧&#x1f618; &#x1f496;设计流程定…

测试开发体系

软件测试 通过手工或者工具对 “被测对象”进行测试验证实际结果与预期结果之间是否存在差异 软件测试作用 通过测试工作可以发现并修复软件当中存在的缺陷&#xff0c;从而提高用户对产品的使用信心测试可以降低同类型产品开发遇到问题的风险 软件缺陷 软件缺陷被测试工程…

船舶维保管理:Java与SpringBoot的完美结合

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

Linux openKylin(开放麒麟)系统SSH服务安装配置与公网远程连接

文章目录 前言1. 安装SSH服务2. 本地SSH连接测试3. openKylin安装Cpolar4. 配置 SSH公网地址5. 公网远程SSH连接6. 固定SSH公网地址7. SSH固定地址连接8. 结语 前言 openKylin是中国首个基于Linux 的桌面操作系统开发者平台&#xff0c;通过开放操作系统源代码的方式&#xff…

在工业制造方面,如何更好地实现数字化转型?

实现工业制造的数字化转型涉及利用数字技术来增强流程、提高效率并推动创新。以下是工业制造领域更好实现数字化转型的几个关键步骤&#xff1a; 1.定义明确的目标&#xff1a; 清楚地概述您的数字化转型目标。确定需要改进的领域&#xff0c;例如运营效率、产品质量或供应链…

【vue ezuikit-js】5分钟实现萤石视频放大对焦和缩小对焦

实现功能如上图:点击+按钮,实现画面放大并对焦;点击-,实现画面缩小并对焦。 官网上提供了电子放大的控制按钮和接口,但是只是把当前画面进行放大,并没有对焦,画面模糊。 萤石官方还提供了对焦的接口,根据传入的参数不同,可以实现放大对焦和缩小对焦。但是注意此接口是…

【Matplotlib】figure方法 你真的会了吗!?

&#x1f388;个人主页&#xff1a;甜美的江 &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;matplotlib &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共同学习、交流进…

mysql项目实战,常用sql语句的实战笔记

1.使用sql语句对数据库进行创建 //创建实验用的数据库 CREATE DATABASE jsschool;//使用当前数据库 USE jsschool;//创建学生表 CREATE TABLE student (sno VARCHAR(20) PRIMARY KEY COMMENT 学生编号,sname VARCHAR(20) NOT NULL COMMENT 学生姓名,ssex VARCHAR(10) NOT NULL…

基于Java超市管理系统设计与实现(源码+部署文档)

博主介绍&#xff1a; ✌至今服务客户已经1000、专注于Java技术领域、项目定制、技术答疑、开发工具、毕业项目实战 ✌ &#x1f345; 文末获取源码联系 &#x1f345; &#x1f447;&#x1f3fb; 精彩专栏 推荐订阅 &#x1f447;&#x1f3fb; 不然下次找不到 Java项目精品实…

c++入门学习④——对象的初始化和清理

目录 对象的初始化和清理&#xff1a; why? 如何进行初始化和清理呢&#xff1f; 使用构造函数和析构函数​编辑 构造函数语法: 析构函数语法: 构造函数的分类&#xff1a; 两种分类方式&#xff1a; 三种调用方法&#xff1a; 括号法&#xff08;默认构造函数调用&…

sql非查询知识点(增删改-crud没有r)

1.建库 create database database_name 2.使用该数据库 use database_name 3.建表 3.1普通建表 create table if not exists actor(actor_id smallint(5) not null primary key comment "主键id",first_name varchar(45) not null comment "名字",last…

Python中的while循环,知其然知其所以然

文章目录 while循环结构1.用循环打印1 ~ 100步骤解析2. 1 ~ 100的累加和3.死循环1. 用死循环的方法实现 1 ~ 100累加和 4. 单向循环(1)打印 一行十个小星星*(2)通过打印一个变量的形式,展现一行十个小星星(3)一行十个换色的星星 ★☆★☆★☆★☆★☆(4)用一个循环,打印十行十列…

重写Sylar基于协程的服务器(7、TcpServer HttpServer的设计与实现)

重写Sylar基于协程的服务器&#xff08;7、TcpServer & HttpServer的设计与实现&#xff09; 重写Sylar基于协程的服务器系列&#xff1a; 重写Sylar基于协程的服务器&#xff08;0、搭建开发环境以及项目框架 || 下载编译简化版Sylar&#xff09; 重写Sylar基于协程的服务…

『运维备忘录』之 Vim 命令详解

运维人员不仅要熟悉操作系统、服务器、网络等只是&#xff0c;甚至对于开发相关的也要有所了解。很多运维工作者可能一时半会记不住那么多命令、代码、方法、原理或者用法等等。这里我将结合自身工作&#xff0c;持续给大家更新运维工作所需要接触到的知识点&#xff0c;希望大…

杨中科 ASP.NETCORE 高级14 SignalR

1、什么是websocket、SignalR 服务器向客户端发送数据 1、需求&#xff1a;Web聊天;站内沟通。 2、传统HTTP&#xff1a;只能客户端主动发送请求 3、传统方案&#xff1a;长轮询&#xff08;Long Polling&#xff09;。缺点是&#xff1f;&#xff08;1.客户端发送请求后&…

如何使用MCSM搭建我的世界Java版服务器并实现远程联机游戏

文章目录 1. 安装JAVA2. MCSManager安装3.局域网访问MCSM4.创建我的世界服务器5.局域网联机测试6.安装cpolar内网穿透7. 配置公网访问地址8.远程联机测试9. 配置固定远程联机端口地址9.1 保留一个固定tcp地址9.2 配置固定公网TCP地址9.3 使用固定公网地址远程联机 本教程主要介…

1802907-91-0,Methyltetrazine-PEG4-COOH,可以与多种不同的化学基团反应

您好&#xff0c;欢迎来到新研之家 文章关键词&#xff1a;Methyltetrazine-PEG4-COOH&#xff0c;Methyltetrazine-PEG4-acid&#xff0c;甲基四嗪-四聚乙二醇-羧基&#xff0c;甲基四嗪-四聚乙二醇-羧酸&#xff0c;甲基四嗪PEG4羧酸&#xff0c;甲基四嗪-PEG4-羧酸 一、基…