Vue.js基础(一)

news2024/11/26 14:28:46

目录

1、{{ }} 文本插值

2、v-html原始html

3、v-bind Attribute(属性)绑定\三元运算符

4、v-for列表渲染

5、v-on监听事件

6、事件调用方法

7、v-model表单的输入绑定  

8、Props组件交互

父传子

子传父

子传父总结


1、{{ }} 文本插值

<template>
  <div class="hello">
    <p>{{ msg }}</p>
  </div>
</template>

<script>
export default {
  data(){
    return {
      msg:"学习vue"
    }
  }

}
</script>

2、v-html原始html

一些html标签使用模板并不能够生成效果;比如下方示例 标签<a>,要使用v-html才能有效果。

双大括号会将数据解释为纯文本,而不是 HTML。若想插入 HTML,需要使用 v-html 指令:

 

<template>
  <div class="hello">
    <h2>学习vue:模板文件</h2>
    <p>{{ msg }}</p>
    <div>{{ rawHtml }}</div>
    <div v-html="rawHtml"></div>
  </div>
</template>

<script>
export default {
  data(){
    return {
      msg:"学习vue",
      rawHtml:"<a href='http://www.baidu.com'>百度</a>"
    }
  }

}
</script>

 

3、v-bind Attribute(属性)绑定\三元运算符

模板语法不能在html属性中使用,可以使用v-bind指令(可简写成:)

<template>
  <div class="hello">
    <h2>学习vue:模板文件</h2>
    <div v-bind:id="dynamicId"></div>
    <p>{{ num+10 }}</p>
    <p>{{ flag?"chensir":"江河" }}</p>
  </div>
</template>

<script>
export default {
  data(){
    return {
      dynamicId:10002,
      num:10,
      flag:true
    }
  }

}
</script>

4、v-for列表渲染

v-for 指令用于循环渲染列表,其中每个循环项需要唯一的 key 属性,以便 Vue.js 可以跟踪每个列表项的身份,从而在列表数据发生更改时准确地重新渲染列表,提高渲染效率。

v-for指令中的 item 表示数组中的每一个元素,而 index 表示其在数组中的下标; :key="item.id" 表示在循环中为每个列表项分配唯一的标识符,以防止在更新时产生性能问题。

  1. 需要绑定唯一的key
  2. In可以换成of
  3. 当没有id的时候,就要写成[v-for=”(item,index) in data” :key=”index”]

         当有id的时候,就可以写成[v-for=”item in data” :key=”item.id”] 

<template>
  <div class="hello">
    <h2>学习vue:列表渲染</h2>
    <ul>
      <li v-for="(item,index) in newsList" :key="item.id">
         {{ index+1 }}--- {{ item.title }}
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  data(){
    return{
      newsList:[
        {
          id:1001,
          title:"学vue1"
        },
        {
          id:1002,
          title:"学vue2"
        },
        {
          id:1003,
          title:"学vue3"
        },
        {
          id:1003,
          title:"学vue3"
        }
      ]
    }
  }
 
}
</script>

5、v-on监听事件

v-on: 可简写为@

<template>
  <div class="hello">
    <h2>学习vue:监听事件</h2>
    <button v-on:click="counter+=1"> Add  {{counter}}</button>
  </div>
</template>

<script>
export default {
  data(){
    return{
      counter:0
    }
  }
 
}
</script>

6、事件调用方法

<template>
  <div class="hello">
    <h2>学习vue:监听事件</h2>
    <button v-on:click="counter+=1"> Add  {{counter}}</button>
    <button @click="clickHandle">操作消息的按钮</button>
   <p> {{ message }}</p>
   <button @click="say('hi')">say hi</button>
   <button @click="say('what')">say what</button>
   <ul>
    <li @click="clickItemHandle(item)" v-for="(item,index) in names" :key="index">{{ item }}</li>
   </ul>
  </div>
</template>

<script>
export default {
  data(){
    return{
      counter:0,
      message:"消息通知",
      names:["小红","小花","豆豆"]
    }
  },
  methods:{
    clickHandle(event){
      //调用data中字段用this
      this.message="消息被撤回了"
      console.log(event)
      event.target.innerHTML="点击之后"
    },
    say(data){
      console.log(data)
    },
    clickItemHandle(msg){
      console.log(msg)
    }
  }
 
}
</script>

7、v-model表单的输入绑定  

lazy:当失去光标时值才同步

trim:自动过滤输入的首尾空白字符

8、Props组件交互

Props是Vue.js中的一种属性传递方式,允许一级组件向下传递数据给它的子组件。在Vue中,所有的组件默认的数据是私有的,这也让每个组件的可维护性很高。但是,当我们需要在多个组件之间共享数据时,就需要使用Props。

使用Props需要注意以下几点:

属性是单向数据流,即父组件向子组件传递数据,子组件不能直接修改Props的值。

不应该在子组件中直接修改Props的值,这样会导致数据无法保持单向性。

如果需要修改Props传入的数据,在子组件中需要利用Vue提供的事件机制通知父组件修改数据。

需在vue.config.js中关闭eslint校验:lintOnSave: false

父传子

app.vue

<template>
  <MyComponent :title="title" :age="age" :names="names"></MyComponent>
</template>

<script>
// import HelloWorld from './components/HelloWorld.vue'
import MyComponent from './components/MyComponent.vue'

export default {
  name: 'App',
  data(){
    return{
      title:"从app传过来的",
      age:18,
      names:["花花","豆豆","牛牛"]
    }
  },
  components: {
    // HelloWorld,
    MyComponent
  }
}
</script>

 MyComponent.vue

<template>
    <h3>prop传递数据</h3>
    <p>{{ title }}</p>
    <p>age={{ age }}</p>
    <ul>
        <li v-for="(item,index) in names" :key="index">{{ item }}</li>
    </ul>
    
</template>

<script>
export default{
    props:{
        title:{
            type:String,
            default:""
        },
        age:{
            type:Number,
            default:0
        },
        names:{
            type:Array,
            //数组和对象必须使用函数进行返回
            default:function(){
                return []
            }
        }
    }
}

</script>

子传父

app.vue:

<template>
  <div id="app">
    <school :getSchoolName="getSchoolName"></school>
    <hr />
    <student @getStudentName="getStudentName"></student>
    <hr />
    <grade ref="Grade"></grade>
   
  </div>
</template>
 
<script>
import school from "./components/School.vue";
import student from "./components/Student.vue";
import grade from "./components/Grade.vue";
 
export default {
  name: "App",
  components: {
    school,
    student,
    grade,
  },
  methods: {
    //方法一:父组件给子组件一个方法,子组件接收该方法
    getSchoolName(name) {
      console.log("学校名称:", name);
    },
    //方法二:自定义事件,子组件使用$emit函数触发父组件绑定的事件
    getStudentName(name) {
      console.log("学生名称:", name);
    },
    //方法三:通过ref属性获取子组件实例对象
    getGrade(grade){
         console.log("数学成绩:",grade );
    }
  },
  mounted() {
      this.$refs.Grade.$on("getGrade",this.getGrade)
  },
};
</script>
 

School.vue

<template>
  <div>
    学校名称{{ name }}, 学校地址{{ address }}
    <button @click="sendName">点我获取学校名称</button>
  </div>
</template>
 
<script>
export default {
  name: "School",
  props: ["getSchoolName"],
  data() {
    return {
      name: "北京大学",
      address: "北京",
    };
  },
  methods: {
    sendName() {
      this.getSchoolName(this.name);
    },
  },
};
</script>

Student.vue

<template>
  <div>
    学生姓名{{ name }}, 学生年龄{{ age }}
    <button @click="sendStudentName">点我获取学生姓名</button>
  </div>
</template>
 
<script>
export default {
  name: "Student",
  data() {
    return {
      name: "张三",
      age: 18,
    };
  },
  methods: {
    sendStudentName() {
      this.$emit("getStudentName", this.name);
    },
  },
};
</script>

Grade.vue

<template>
  <div>
    数学:{{ mathGrade }}
     <button @click="getGrade">点我获取数学成绩</button>
  </div>
</template>
 
<script>
export default {
  name: "Grade",
  data() {
    return {
      mathGrade: 99,
    };
  },
  methods: {
      getGrade(){
           this.$emit("getGrade",this.mathGrade)
      }
  },
};
</script>

子传父总结

方法一

 总结:子组件通过props属性接收父组件的方法,然后在子组件中调用父组件的方法以及传递参数。

<---父组件--->
 <school :getSchoolName="getSchoolName"></school>
 
<---子组件--->
export default {
  name: "School",
  props: ["getSchoolName"],
  data() {
    return {
      name: "北京大学",
      address: "北京",
    };
  },
  methods: {
    //子组件的一个点击事件
    sendName() {
       //由于接收到方法参数,所以可以直接调用
      this.getSchoolName(this.name);
    },
  },
};

方法二

总结:通过自定义事件,绑定到子组件实例对象上,然后在子组件中使用$emit方法触发自定义事件以及传参,父组件调用回调函数完成取值

<---父组件--->
<student @getStudentName="getStudentName"></student>
 
<---子组件--->
export default {
  name: "Student",
  data() {
    return {
      name: "张三",
      age: 18,
    };
  },
  methods: {
    //子组件的一个点击事件
    sendStudentName() {
    //通过$emit触发自定义事件(@后面的为触发的自定义事件)
      this.$emit("getStudentName", this.name);
    },
  },
};

 方法三

总结:通过ref属性,父组件获取到子组件实例对象,然后触发方法

<---父组件--->
 <grade ref="Grade"></grade>
 
//script中使用挂载函数:
  mounted() {
    //this.$refs.Grade表示获取到grade这个实例
    //$on()表示当……时候,第一个参数表示当调用getGrade函数的时候,第二个参数表示父组件中的回调函数
      this.$refs.Grade.$on("getGrade",this.getGrade)
  },
 
  methods:{
    //父组件的回调函数
    getGrade(grade){
         console.log("数学成绩:",grade );
    }
}
 
<---子组件--->
export default {
  name: "Grade",
  data() {
    return {
      mathGrade: 99,
    };
  },
  methods: {
      getGrade(){
        //使用方法和方法二中的类似
           this.$emit("getGrade",this.mathGrade)
      }
  },
};

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

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

相关文章

手写Spring:第3章-实现Bean的定义、注册、获取

文章目录 一、目标&#xff1a;实现Bean的定义、注册、获取二、设计&#xff1a;实现Bean的定义、注册、获取三、实现&#xff1a;实现Bean的定义、注册、获取3.1 工程结构3.2 实现Bean的定义、注册、获取类图3.3 定义Bean异常3.4 BeanDefinition定义和注册3.4.1 BeanDefinitio…

解决 Spring Boot 与 springfox 的 NullPointerException 问题

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

MRI多任务技术及应用

目录 一、定量心血管磁共振成像&#xff08;CMR&#xff09;的改进方法二、磁共振多任务三、磁共振多任务的成像框架四、磁共振多任务的图像模型和采样和重建策略五、利用MR多任务进行快速三维稳态CEST(ss-CEST)成像5.1 利用MR多任务进行快速三维稳态CEST(ss-CEST)成像介绍5.2 …

嵌入式学习笔记(14)位置有关编码

位置无关编码&#xff08;PIC,position independent code&#xff09;&#xff1a;汇编源文件被编码成二进制可执行程序时编码方式与位置&#xff08;内存地址&#xff09;无关。在我们写程序时&#xff0c;必须给链接器指定地址。将来的程序被执行时必须放在当时链接时给定的地…

iPhone照片导入电脑的绝佳教程,赶快get起来!

为什么都说苹果手机拍照比安卓手机好看&#xff1f;因为苹果手机拍照更加真实&#xff0c;其镜头和硬件能让照片更好地接近原始色彩。手机拍照好看就会让人忍不住多拍几张&#xff0c;久而久之手机内存就满了。有什么方法能将照片保存到电脑上吗&#xff1f;iPhone照片导入电脑…

《vue3实战》运用push()方法实现电影评价系统的添加功能

目录 前言 电影评价系统的添加功能是什么&#xff1f; 电影评价系统的添加功能有什么作用&#xff1f; 一、push&#xff08;&#xff09;方法是什么&#xff1f;它有什么作用&#xff1f; 含义&#xff1a; 作用&#xff1a; 二、功能实现 这段是添加开始时点击按钮使…

私募证券基金动态-23年8月报

成交量&#xff1a;8月日均8,252.00亿元 8月A股两市日均成交8,252.00亿元&#xff0c;环比下降12.23%、同比下降18.11%。8月整体23个交易日&#xff0c;仅有3个交易日单日成交金额过万亿&#xff0c;且成交量起伏较大&#xff0c;单日成交金额最低仅有6805.32亿元&#xff08;…

C# 实现电子签名

本项目基于Emgu.CV&#xff08;C#下OpenCv的封装&#xff09;开发的&#xff0c;编译器最新版Vs2022&#xff0c;编译环境x86 直接看效果图 1.主页面 2.我们先看手写的方式&#xff1a; 点击确认就到主界面&#xff0c;如下 &#xff1a; 点击自动适配-&#xff0c;再点击生成…

windows安装向量数据库milvus

本文介绍windows下安装milvus的方法。 一.Docker安装 1.1docker下载 首先到Docker官网上下载docker:Docker中文网 官网 1.2.安装前前期准备 先使用管理员权限打开windows powershell 然后在powershell里面输入下面那命令&#xff0c;启用“适用于 Linux 的 Windows 子系统”…

JMeter压力测试入门教程

Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试&#xff0c;它最初被设计用于Web应用测试但后来扩展到其他测试领域。 它可以用于测试静态和动态资源例如静态文件、Java小服务程序、CGI脚本、Java 对象、数据库&#xff0c; FTP服务器, 等等。J…

JavaScript中的深拷贝和浅拷贝

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 浅拷贝&#xff08;Shallow Copy&#xff09;&#xff1a;⭐深拷贝&#xff08;Deep Copy&#xff09;&#xff1a;⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带…

数据结构day7栈-顺序栈的实现

用指针比用数组好&#xff0c;这样用户可以自己指定空间的大小&#xff0c;有参与感。 全部代码: main.c #include <stdio.h> #include <string.h> #include "sqstack.h"int main(int argc, char *argv[]) {sqstack *s;int i;s stack_create(100);if(…

数据结构 - 单链表

文章目录 目录 文章目录 一、什么是链表? 线性表: 顺序表: 二、链表的分类和实现 分类: 实现: 1.创建节点类 2.创建单链表 1.addTail(尾增) 2.删除节点值为key的第一个节点 3.插入节点(在指定位置) 4.获取链表长度 总结 前言 大家好,这篇博客给大家讲一下什么是…

《代码随想录》刷题笔记——数组篇【java实现】

*二分查找 题目链接 https://leetcode.cn/problems/binary-search/ 左闭右闭区间实现 时间复杂度&#xff1a;O(log n)空间复杂度&#xff1a;O(1) /*** 左闭右闭写法** param nums* param target* return*/ public static int search1(int[] nums, int target) {if (nums…

关于工信部发布的app备案以及小程序备案流程

一、相关政策 通知&#xff1a;https://beian.miit.gov.cn/#/Integrated/lawStatute 腾讯备案&#xff1a;网站备案 首次备案-网站备案-文档中心-腾讯云 阿里备案&#xff1a;网站备案_ICP备案_备案迁移_备案-阿里云 二、遇到的问题 APP备案 安卓获取平台公钥方法&#xf…

Vue + Element UI 前端篇(九):接口格式定义

接口请求格式定义 前台显示需要后台数据&#xff0c;我们这里先把前后端交互接口定义好&#xff0c;没有后台的时候&#xff0c;也方便用mock模拟。 接口定义遵循几个规范&#xff1a; 1. 接口按功能模块划分。 系统登录&#xff1a;登录相关接口 用户管理&#xff1a;用户…

Redis-1.4-过期策略

1 设置带过期时间的 key # 时间复杂度&#xff1a;O&#xff08;1&#xff09;&#xff0c;最常用方式 expire key seconds# 字符串独有方式 setex(String key, int seconds, String value)除了string独有设置过期时间的方法&#xff0c;其他类型都需依靠expire方法设置时间&a…

说说MySQL回表查询与覆盖索引

分析&回答 什么是回表查询&#xff1f; 通俗的讲就是&#xff0c;如果索引的列在 select 所需获得的列中&#xff08;因为在 mysql 中索引是根据索引列的值进行排序的&#xff0c;所以索引节点中存在该列中的部分值&#xff09;或者根据一次索引查询就能获得记录就不需要…

【Linux】Qt Remote之Remote开发环境搭建填坑小记

总体思路 基于WSL2&#xff08;Ubuntu 22.04 LTS&#xff09;原子Alpha开发板进行Qt开发实验&#xff0c;基于Win11通过vscode remote到WSL2&#xff0c;再基于WSL2通过Qt 交叉编译&#xff0c;并通过sshrsync远程到开发板&#xff0c;构建起开发工具链。 Step1 基于Win11通过…

Mock接口测试

什么是mock? 测试桩&#xff0c;模拟被测对象的返回&#xff0c;用于测试 通常意义的mock指的就是mock server, 模拟服务端返回的接口数据&#xff0c;用于前端开发&#xff0c;第三方接口联调 为什么要mock? 1. 解决依赖问题&#xff1a;当我们测试一个接口或者功能模块…