vue()

news2024/9/24 10:23:14

目录

首先我们回顾一下之前学的东西

入门:

v-bind    绑定属性用法

​编辑

v-if 用法

v-for 

v-on 

v-model:双向绑定

组件:

全局组件:

局部组件:

vue生命周期:(这里让我研究研究)

vue项目:

访问:

3.7 单文件组件介绍和使用

单文件组件的特点

实例:

实例2\


首先我们回顾一下之前学的东西

 mybatis     ORM框架  把使用java面向对象思想,把数据库表记录及表之间的关系(一对一,一对多,多对一,多对多)和对象及对象(assiastion(一对一,多对一),collection(一对多,多对多))之间的关系做映射,达到操作对象,来操作数据库的目的。知识点:基础,动态sql,一二级缓存,插件原理(interceptor)

spring     

        核心 IOC 又叫DI     项目使用   把springmvc和mybatis使用IOC整合到一块   控制层(springmvc)->服务层->DAO层(mybatis )

       核心 AOP  面向切面编程   把对所有业务支持的通用模块/功能,从业务提取出来,单独做成的一个功能叫切面 ,然后使用AOP技术把切面整合业务中。例如常用的,事务处理,日志记录等等功能。减少代码重复量,降低代码之间耦合度,方便代码管理和维护。

  springmvc   

        前端控制器 DispatcherServlet-> 映射处理器handlerMapper->适配处理器 handlerAdaptor -> 处理器(自己写的controller)-> ModelAndView-> 视图解析器ViewResovler->视图渲染(把model域数据放入request)->返回给客户端

        知识点:统一异常处理 HandlerExceptionResolver

                     拦截器    Interception

                     定时任务    Task  ->  @Scheduled

                     Restful风格     get(R)   post(C)   put(U)   delete(D)   基于网络应用的程序,都必须遵循请求规则,才可以交互数据。   

        

          做项目前端使用    vue +elementui +axios 技术      ssm+shiro


入门:

Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。

官网:

vue2: Vue.js

vue3: ​​​​​​https://cn.vuejs.org/

命令:(这边建议自己把代码写写运行,更容易理解)

v-bind    绑定属性用法
  <title>vue示例</title>
  <!-- 开发环境版本,包含了有帮助的命令行警告 -->
  <!--<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script> -->
  <script src="./vue.js"></script>
 </head>
 <body>
    <div id="app-2" class="diva">
       <!-- <span v-bind:title="msg">-->
	   <!--v-bind可以使用: 做简化-->
	    <span :title="msg">
		     鼠标悬停一会儿观察效果
		</span>
	</div>
	 
	<script>
        var app =new Vue({
		  el:"#app-2",//绑定根元素
		  data:{
              msg:'页面111加载于:'+new Date().toLocaleString()
		  }
		})
	</script>

v-if 用法
 <body>
    <div id="app">
	     <!--使用v-if标签,来确定p元素是否在当前div是否存在-->
        <p v-if="isShow">是否可以看到我</p>
	</div>
	 
	<script>
        var app =new Vue({
		  el:"#app",//绑定根元素
		  data:{
              isShow:false
		  }
		})
	</script>
  
 </body>

我们不仅可以把数据绑定到 DOM 文本或 attribute,还可以绑定到 DOM 结构,是否显示p标签。

v-for 

v-for 指令可以绑定数组的数据来渲染一个项目列表

    <div id="app">
	     <ul>
		     <!--把gameList数组中的每一个对象赋给变量game-->
		     <li v-for="game in gameList">
			   {{game.gid}}-----{{game.gameName}}-----{{game.describe}}
			 </li>
		 </ul>
	</div>
	 
	<script>
        var app =new Vue({
		  el:"#app",//绑定根元素
		  data:{
               gameList:[ //定义一个对象数组
			   {gid:1001,gameName:'王者荣耀',describe:'有手上王者'},
			   {gid:1002,gameName:'英雄联盟',describe:'是王者都是大神'},
			   {gid:1003,gameName:'和平精英',describe:'每天晚上吃鸡一把才睡觉'}
			   ]
		  }
		})
	</script>

v-on 

 给元素绑定事件

      为了让用户和你的应用进行交互,我们可以用 v-on 指令添加一个事件监听器,通过它调用在 Vue 实例中定义的方法

  <div id="app">
        <p>{{message}}</p>
    <!--使用v-on 给button绑定一个点击事件-->
		 <!--<button v-on:click='reverseMsg'>反转消息</button>-->
         <!--v-on的简化写法为 @ -->
		 <button @click='reverseMsg'>反转消息</button>
        </div>

        <script>
            var app=new Vue({
                el:"#app",//绑定根元素
                data:{//定义初始化数据
                    message:"我上楼复习"
                     //message:'上1海自来水来自海2上'
			  //message:'黄1山落叶叶落山2黄' 
                },
                methods:{//初始化或者给页面元素绑定的所有事件方法,都可以写到这里面
              reverseMsg:function(){
				  //alert(111);
				  //this 和java OOP中的this一样,都代表当前Vue类实例化出来的对象  使用this就可以获取到该对象的所有属性及方法
				  // .split('') 按照指定字符分割字符串 ['我','上','楼','复','习']
				  //reverse() 反转数组 ['习','复','楼','上','我']
				  //join('#')  '习#复#楼#上#我'
				   //join('')  '习复楼上我'
				  this.message = this.message.split('').reverse().join('')
			  }
		  }
            })
        </script>
    
    

v-model:双向绑定
  <div id="app">
	      <!--使用插值表达式,让message显示-->
	     <p>{{message}}</p>
		  <!--使用v-model绑定输入框的值-->
		 <input v-model='message'>
	</div>
	 
	<script>
        var app =new Vue({
		  el:"#app",//绑定根元素
		  data:{//定义初始化数据
              message:'我上楼复习' 
		  }
		})
	</script>

组件:

全局组件:

案例1、

 <div id="app">
	   <ol>
	         <!--组件使用-->
             <todo-item></todo-item> 
			 <todo-item></todo-item>
			 <todo-item></todo-item>
			 <todo-item></todo-item>
	   </ol>
	</div>
	 
	<script>
	     <!--演示用法,没有实际意义-->
	    Vue.component('todo-item',//组件名称
		{//组件内容
			template:'<li>做什么事。。。。</li>'// 组件模板
		}
		)

        var app =new Vue({
		  el:"#app",//绑定根元素
		   
		})
	</script>

案例2、

 <div id="app">
	     <ul>
		    <!--独立的,可以复用的-->
			<!--循环取出gameList每一个对象赋值给game-->
			<!--确定元素的唯一性  使用key属性来区别 v-bind:key='game.gid'-->
			<show-game-list v-for="game in gameList" v-bind:gm="game" v-bind:key='game.gid'>
			</show-game-list>
		     
		 </ul>
	</div>
	 
	<script>
	    //定义组件
		Vue.component('show-game-list',//组件名称
		 { //组件内容
			 props:['gm'],//定义属性变量,用于父作用域gameList中的每个元素传递到组件中
			 template:'<li>{{gm.gid}}-----{{gm.gameName}}-----{{gm.describe}}</li>'//模板内容
		 }
		)

		//实例化vue对象
        var app =new Vue({
		  el:"#app",//绑定根元素
		  data:{
               gameList:[ //定义一个对象数组
			   {gid:1001,gameName:'王者荣耀',describe:'有手上王者'},
			   {gid:1002,gameName:'英雄联盟',describe:'是王者都是大神'},
			   {gid:1003,gameName:'和平精英',describe:'每天晚上吃鸡一把才睡觉'}
			   ]
		  }
		})
	</script>

局部组件:


    <div id="app">
       <my-com :info="msg"></my-com>
    </div>
    
    <script src="./js/vue.min.js"></script>
    <script>
       //定义局部组件
       var MyComponent={
        props:["info"],
        template:`
            <h1>这是:{{info}}</h1>
        `
       } 

       var v = new Vue({
        el:"#app",
        data:{
            msg:"测试内容"
        },
        components:{
            "my-com":MyComponent
        }
       })

    </script>

vue生命周期:(这里让我研究研究)

new Vue  -> 创建前(before  create)->创建后(created)->挂载前(before mount)->挂在后(mounted)->更新前(before update)->更新后(updated)->销毁前(before distory)->销毁后(distoried)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>

    <div id="app">
        {{info}}
        <input type="button" value="测试" @click="xh()">
    </div>
    
    <script src="./js/vue.js"></script>
    <script>
        var v= new Vue({
            el:"#app",
            data:{
                info:456
            },
            methods:{
                xh:function(){
                    //alert(123);
                    
                    this.$destroy();
                }
            },
            // template:"<h1>{{info}}</h1>",
            beforeCreate(){
                    console.log("beforeCreate============");
                    console.log(this.$el);
                    console.log(this.$data);
                },
                created(){
                    console.log("created============");
                    console.log(this.$el);
                    console.log(this.$data);
                },
                beforeMount(){
                    console.log("beforeMount============");
                    console.log(this.$el);
                    console.log(this.$data);
                },
                mounted(){
                    console.log("mounted============");
                    // console.log(this.$el);
                    // console.log(this.$data);
                    
                },
                beforeDestroy(){
                    this.info=999;
                    console.log("beforeDestroy============");
                    console.log(this.$el);
                    console.log(this.$data);
                    console.log(this.info);
                    

                },
                destroyed(){
                    // console.log("destroy============");
                    // console.log(this.$el);
                    // console.log(this.$data);
                }
        });    
        //  v.$mount("#app")

    </script>
</body>
</html>

vue项目:

安装:

这边可以看看我另一个安装vue的文章

vue安装和配置

vue.js

npm 

vue-cli

在你盘里创建一个新文件夹:

然后进入你创建的文件中,文件路径上写cmd

输入vue create xxxx(这里xxx是你要创建的新文件)

然后选择以下的  (空格是选上和取消)

运行:

访问:

 http://localhost:8080(这里是你运行后出现的ip)

vscode 启动失败   npm 命令找不到

3.7 单文件组件介绍和使用

单文件组件由来:

在很多 Vue 项目中,我们使用 Vue.component 来定义全局组件,紧接着用 new Vue({ el: '#container '}) 在每个页面内指定一个容器元素。

这种方式在很多中小规模的项目中运作的很好,在这些项目里 JavaScript 只被用来加强特定的视图。但当在更复杂的项目中,或者你的前端完全由 JavaScript 驱动的时候,下面这些缺点将变得非常明显:

  1. 全局定义 (Global definitions) 强制要求每个 component 中的命名不得重复
  1. 字符串模板 (String templates) 缺乏语法高亮,在 HTML 有多行的时候,需要用到丑陋的 \
  1. 不支持 CSS (No CSS support) 意味着当 HTML 和 JavaScript 组件化时,CSS 明显被遗漏
  1. 没有构建步骤 (No build step) 限制只能使用 HTML 和 ES5 JavaScript,而不能使用预处理器,如Babel

文件扩展名为 .vue 的 single-file components(单文件组件) 为解决上述问题提供了方法

单文件组件的定义

新建文件扩展名为.vue的文件,文件包含以下内容:

<template>

    <div class="cla"></div>

</template>

<script>

export default {

    props: {//注册属性 父传子 数据传递

    },

    data() {

        return {};//定义数据

    },

    created(){//created在模板渲染成html前调用,通常在这里初始化某些属性,然后再渲染视图

    },

    methods: {//方法事件处理

    },

    components: {//组件注册

    },

};

</script>

<style>

    .cla{

        color:red;

    }

</style>

单文件组件的特点

  1. 完整语法高亮
  1. 模块化处理
    • template中书写HTML结构
    • script中书写组件的配置项
    • style中书写组件的样式
  1. 组件作用域的 CSS  【scoped 表明这里写的css 样式只适用于该组件,可以限定样式的作用域】

单文件组件中script 标签理解

  1. 不使用.vue 单文件时,我们是通过 Vue 构造函数创建一个 Vue 根实例来启动vue 项目

在.vue文件中,export default 后面的对象就相当于 new Vue() 构造函数中的接受的对象

  1. 需要注意data 的书写方式不同,在 .vue 组件中data 必须是一个函数,它return返回一个对象,这个返回的对象的数据,供组件实现

实例:

<template>
    <div class="cla">
          <p>{{msg}}</p>
          <button @click="reverseMsg">反转消息</button>
          <br><br>
          <HelloWorld msg="hello world!"/>
    </div>
</template>
<script>
import HelloWorld from '@/components/HelloWorld.vue'
export default {
    props: {//注册属性 父传子 数据传递
    },
    data() {
        return {
            msg:'hello qy141!!!'
        };//定义数据
    },
    created(){//created在模板渲染成html前调用,通常在这里初始化某些属性,然后再渲染视图
    },
    methods: {//方法事件处理
       reverseMsg:function(){
           this.msg = this.msg.split('').reverse().join('');
       }
    },
    components: {//组件注册
      HelloWorld
    },
};
</script>
<style>
    .cla{
        color:red;
    }
</style>

实例2\

----------------------------
src/components/MyDemo.vue
----------------------------
<template>
    <div>
        <h1>这是:{{ info }}</h1>
    </div>
</template>

<script>
export default {
    props:["info"]
}
</script>

------------------------
------------------------
src/views/MyPage.vue
-------------------------
<template>
    <div>
        <h1>我的页面</h1>
        <my-demo :info="msg"></my-demo>
    </div>
</template>

<script>
import MyDemo from '../components/MyDemo.vue'
export default {
    data(){
        return{
            msg:"一个消息"
        }
    },
    components:{
        "my-demo":MyDemo
    }
}
</script>
src/router/index.js
---------------------
import Vue from 'vue'
import VueRouter from 'vue-router'
import Home from '../views/Home.vue'
import MyPage from '../views/MyPage.vue'

Vue.use(VueRouter)

  const routes = [
  {
    path: '/',
    name: 'Home',
    component: Home
  },
  {
    path: '/about',
    name: 'About',
    // route level code-splitting
    // this generates a separate chunk (about.[hash].js) for this route
    // which is lazy-loaded when the route is visited.
    component: () => import(/* webpackChunkName: "about" */ '../views/About.vue')
  },
  {
    path: '/mypage',
    name: 'MyPage',
    component:MyPage
  }
]

const router = new VueRouter({
  routes
})

export default router

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

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

相关文章

C++ 函数模板和类模板

参考视频&#xff1a;C类模板_哔哩哔哩_bilibili 遗留问题&#xff1a;编译器怎么处理函数模板和类模板 目录 一、为什么会有函数模版&#xff1f;函数模板是为了解决什么问题&#xff1f; 二、函数模板的概念 三、函数模版的使用 四、函数模板的特化 五、类模板的概念 …

24/8/7 算法笔记 支持向量机回归问题天猫双十一

import numpy as np from sklearn.svm import SVR import matplotlib.pyplot as plt X np.linspace(0,2*np.pi,50).reshape(-1,1) y np.sin(X) plt.scatter(X,y) 建模 线性核函数 svr SVR(kernel linear) svr.fit(X,y.ravel())#变成一维y_ svr.predict(X) plt.scatter(…

heapq.heapify构建小顶堆的流程

代码示例 import heapqlst [2, 3, 4, 6, 9, 1, 5] heapq.heapify(lst) print(lst)流程解释 初始列表: 列表 lst 在开始时是 [2, 3, 4, 6, 9, 1, 5]。 调用 heapq.heapify(lst): heapify 函数将 lst 转换为一个小顶堆&#xff08;min-heap&#xff09;。在小顶堆中&#xff0…

Spring框架漏洞(附修复方法)

Spring是Java EE编程领域的一个轻量级开源框架&#xff0c;该框架由一个叫Rod Johnson的程序员在2002年最早提出并随后创建&#xff0c;是为了解决企业级编程开发中的复杂性&#xff0c;业务逻辑层和其他各层的松耦合问题&#xff0c;因此它将面向接口的编程思想贯穿整个系统应…

《UniverSeg: Universal Medical Image Segmentation》ICCV2023

摘要 这篇论文提出了一种名为 UniverSeg 的方法&#xff0c;它能够解决未见过的医学图像分割任务&#xff0c;而无需额外的训练。现有的深度学习模型通常无法泛化到新的解剖结构、图像模式或标签上。UniverSeg 利用一种新的 CrossBlock 机制&#xff0c;通过查询图像和定义新分…

利用tkinter制作简易计算器,页面美观,计算保留4位小数

import tkinter as tk import time window tk.Tk() window.title("简易计算器") window.geometry(300x400) content def btn_onclick(data):global contentif data"AC" or data "MC":expression.set()result.set()content elif data :result…

无人机长生不老秘籍

机身保养 外观检查 1.检查机器表面整洁无划痕无针孔凹陷擦伤、畸变等损坏情况 2.晃动机身&#xff0c;仔细听机身内部有无松动零件或者螺丝在机身内部 桨叶检查 1.有无裂痕、磨损、变形等缺陷&#xff0c;如有明显缺陷建议更换 2.卡扣、紧固件有无松脱或失效&#xff0c;…

嵌入式学习之路 14(C语言基础学习——指针操作一维整型数组)

一、指针基础 指针的概念 地址表示内存单元的编号&#xff0c;也被称为指针。指针既是地址&#xff0c;也是一种专门用于处理地址数据的数据类型。 例如&#xff0c;变量a的地址或者十六进制表示的0x1000都可以视作指针。 指针变量的定义 语法&#xff1a;基类型 * 指针变…

探索灵办AI:智能办公的好帮手

引言 随着AI工具的增多&#xff0c;选择合适的AI助手变得尤为重要。ChatGPT的订阅费用高且功能单一&#xff0c;很多小伙伴开始寻找更具性价比和多功能的替代品。灵办AI以其便捷、高效、多功能的特点&#xff0c;成为许多朋友的新宠。 灵办AI助手是一款多功能的全能AI助手&am…

智能名片信息交流系统应用场景解决方案

智能名片作为传统名片在数字化时代的进化产物&#xff0c;集成了移动互联网、大数据和人工智能等先进技术&#xff0c;为商务交流和客户关系管理带来了全新的体验。 系统主要功能 01内容聚合与展示 企业信息展示&#xff1a;智能名片不仅包含个人基本信息&#xff0c;还能展示…

MDIO C22协议访问MMD寄存器

以太网PHY芯片中SMI(Serial Management Interface)串行管理接口,也称MDIO(Management Data Input/Output),通常作为MII管理接口(MII Management Interface)。有两根线,分别为双向的MDIO和单向的MDC,用于以太网设备中上层对物理层(PHY)的管理。 MDIO接口有两种协议…

LVX+keepalived群集

Keepalived 双 机 热 备 基 础 知 识 Keepalived 起初是专门针对LVS 设计的一款强大的辅助工具&#xff0c;主要用来提供故障切换(Failover) 和健康检查(Health Checking) 功能——判断 LVS负载调度器、节点服务器的可用性&#xff0c;当master 主机出现故障及时切换到b…

MacOS Anaconda 安装教程及虚拟环境创建

一、下载 Anaconda 1、Anaconda 官网 2、清华大学开源软件镜像站 点 Date 按时间排序&#xff0c;根据自己 Mac 芯片类型下载对应最新版本的。 Intel 芯片的下载 x86_64 版本的Apple m1 芯片的下载 arm64 版本的 二、安装 Anaconda 将安装包下载到本地后&#xff0c;双击安…

人工智能|人工智能教育的发展现状及趋势

智能的热潮正席卷全球。国家在人工智能领域展开战略布局&#xff0c;人工智能人才成为国家急需的高层次技术人才。据领英发布的《全球 Al 领域人才报告》显示&#xff0c;国内人工智能人才缺口达到 500 多万。 毫无疑问&#xff0c;人工智能将不可阻挡地影响所有产业。给自己一…

随手记1.0

easyexcel多级表头导出各级设置样式&#xff08;继承HorizontalCellStyleStrategy实现&#xff09; package com.example.wxmessage.entity;import com.alibaba.excel.metadata.data.WriteCellData; import com.alibaba.excel.write.handler.context.CellWriteHandlerContext;…

探索 Amazon Q Developer 那些有趣的功能

我在 McKinsey 2024 年 5 月 30 日提供的一项名为“The state of AI in early 2024-Gen AI adoption spikes and starts to generate value”的调研中读到这么一句话&#xff1a;人工智能在组织中最常见的两个使用职能是&#xff1a;“市场营销和销售”以及“产品和服务开发”&…

vue3-ts:husky + prettier / 代码格式化工具

一、Prettier简介 Prettier是一个流行的代码格式化工具&#xff0c;它的主要作用是帮助开发者自动规范化代码的格式&#xff0c;提高代码的可读性和一致性。Prettier通过解析代码并使用自己的规则重新打印它&#xff0c;以确保代码风格的一致性和符合预设的格式化标准。 二、…

计网学习(四)——网络层

一、网际协议IP 互联网采用的设计思路&#xff1a;网络层向上只提供简单灵活的、无连接的、尽最大努力交付的数据报服务”&#xff0c;即IP数据报在网络中传输时是不可靠的服务&#xff0c;可能会出现数据丢失等情况TCP/IP体系中网络层常常被称为网际层或IP层与IP协议一起使用…

35分钟教你从0到1,水出SCI(精品),学术裁缝必修课_来自B站水论文的程序猿

系列文章目录 文章目录 系列文章目录一、抽象理解二、具体做法1、什么是Baseline(基础实验&#xff09;2、怎么和导师说3、怎么做压低baseline 4、怎么写 一、抽象理解 一篇论文A:西红柿炒鸡蛋 一篇论文B:芹菜炒肉 你就可以:西红柿炒肉 二、具体做法 1、什么是Baseline(基础…

视频压缩文件太大了怎么缩小?6个视频压缩技巧,速度收藏起来!

高清视频文件&#xff0c;尤其是那些以 1080p 和 720p 清晰度为特征的视频&#xff0c;通常都拥有相当大的体积&#xff0c;会占据大量计算机存储空间。因此&#xff0c;为了更好地将它们进行分享和存储&#xff0c;您可能需要对它们进行压缩&#xff0c;以减小它们的尺寸。然而…