【vue讲解:ref属性、动态组件、插槽、vue-cli创建项目、vue项目目录介绍、vue项目开发规范、es6导入导出语法】

news2025/2/22 19:43:16

0 ref属性(组件间通信)

# 1 ref属性放在普通标签上
	<input type="text" v-model="name" ref="myinput">
	通过 this.$refs['myinput'] 拿到的是 原生dom对象
    操作dom对象:改值,换属性。。。
    
    
# 2 ref属性放在 组件上
 <Child ref="mychild"></Child>
 通过 this.$refs['mychild'] 拿到的是 组件对象
 组件对象.属性
 组件对象.方法
 实现父子间通信

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="./js/vue.js"></script>
    <script src="./js/axios.js"></script>

</head>
<body>
<div id="app">

    <h1>ref属性</h1>
    <input type="text" v-model="name" ref="myinput">
    <img src="./img/3.png" alt="" ref="myimg">
    <button @click="handleClick">点我执行代码</button>


    <div style="background-color: aquamarine">
        <Child ref="mychild"></Child>
    </div>


</div>
</body>

<script>
    Vue.component('Child', {
        template: `
          <div>
          <img :src="url" alt="" height="300px" width="200px">
          <button @click="handleClick('子组件传入的')">点我弹窗</button>
          </div>`,
        data() {
            return {
                url: './img/1.png'
            }
        },
        methods: {
            handleClick(name) {
                alert(name)
            }
        }
    })

    var vm = new Vue({
        el: '#app',
        data: {
            name: ''
        },
        methods: {
            handleClick() {
                console.log(this.$refs)
                // 1 根据ref指定的名字,取出原生dom对象
                // var i = this.$refs['myinput']
                // console.log(i)
                // i.value = "你好"

                // 2 改图片
                // var i = this.$refs['myimg']
                // i.src='./img/6.png'

                // 3 操作组件对象-->实现组件间通信
                var i = this.$refs['mychild']
                console.log(i.url)
                // 改图片
                i.url = './img/2.png'
                // 执行方法
                i.handleClick('lqz')



            }
        }

    })


</script>
</html>

1 动态组件

# 小案例---》点击按钮,切换组件

1.1 使用v-if控制组件显示与否

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="./js/vue.js"></script>

</head>
<body>
<div id="app">

    <h1>点击按钮切换组件</h1>
    <button @click="who='home'">首页</button>
    <button @click="who='goods'">商品</button>
    <button @click="who='order'">订单</button>

    <Home v-if="who=='home'"></Home>
    <Goods v-else-if="who=='goods'"></Goods>
    <Order v-else></Order>


</div>
</body>

<script>

    var vm = new Vue({
        el: '#app',
        data: {
            who: 'home',
        },
        components: {
            Home: {
                template: `
                <div>
                <h3>我是首页</h3>
                </div>
                                `
            },
            Goods: {
                template: `
                <div>
                <h3 style="background-color: aquamarine">我是商品页面</h3>
                </div>
                                `
            },
            Order: {
                template: `
                <div>
                <h3 style="background-color: red">我是订单</h3>
                </div>
                                `
            },
        }

    })


</script>
</html>

1.2 通过动态组件控制组件显示谁

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="./js/vue.js"></script>

</head>
<body>
<div id="app">

    <h1>点击按钮切换组件</h1>
    <button @click="who='Home'">首页</button>
    <button @click="who='Goods'">商品</button>
    <button @click="who='Order'">订单</button>

    <keep-alive>
        <component :is="who"></component>

    </keep-alive>
</div>
</body>

<script>

    var vm = new Vue({
        el: '#app',
        data: {
            who: 'Home',
        },
        components: {
            Home: {
                template: `
                <div>
                <h3>我是首页</h3>
                </div>
                                `
            },
            Goods: {
                template: `
                <div>
                <h3 style="background-color: aquamarine">我是商品页面</h3>
                </div>
                                `
            },
            Order: {
                template: `
                  <div>
                  <h3 style="background-color: red">我是订单</h3>
                  <input type="text" v-model="search">
                  </div>
                `,
                data() {
                    return {
                        search: ''
                    }
                }
            },
        }

    })


</script>
</html>

1.3 keep-alive的使用–组件缓存

    <keep-alive>
        <component :is="who"></component>
    </keep-alive>

2 插槽

#一般情况下,编写完1个组件之后,组件的内容都是写死的,需要加数据 只能去组件中修改,扩展性很差
# 然后就出现了插槽这个概念,只需在组件中添加<slot></slot>,就可以在的组件标签中添加内容

2.1 基本使用

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="./js/vue.js"></script>

</head>
<body>
<div id="app">

    <h1>插槽使用</h1>

    <div style="background-color: aquamarine">
        <Home>
            <div>
                <img src="./img/1.png" alt="" width="200px" height="300px">
            </div>
        </Home>
    </div>

    <hr>
    <div style="background-color: pink">
        <Home>
            <a href="">点我看美女</a>
        </Home>
    </div>


</div>
</body>

<script>

    var vm = new Vue({
        el: '#app',
        data: {
            who: 'Home',
        },
        components: {
            Home: {
                template: `
                <div>
                <h3>我是首页</h3>
                <slot></slot>
                <h3>结束了</h3>
                </div>
                                `
            },
        }

    })


</script>
</html>

2.2 具名插槽

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="./js/vue.js"></script>

</head>
<body>
<div id="app">

    <h1>具名插槽使用</h1>

    <div style="background-color: aquamarine">
        <Home>
            <div slot="foot">
                <img src="./img/1.png" alt="" width="200px" height="300px">
            </div>
            <div slot="middle">
                <a href="">点我看美女</a>
            </div>
        </Home>
    </div>

    <hr>


</div>
</body>

<script>

    var vm = new Vue({
        el: '#app',
        data: {
            who: 'Home',
        },
        components: {
            Home: {
                template: `
                <div>
                <h3>我是首页</h3>
                <slot name="middle"></slot>
                <h3>结束了</h3>
                <slot name="foot"></slot>
                </div>
                                `
            },
        }

    })


</script>
</html>

3 vue-cli创建项目

# 创建vue项目,需要借助于几个东西
	- nodejs:
    	-javascript只能运行在浏览器中
        -把谷歌浏览器的js解释环境---》使用c重写,--》能够运行在操作之上
        -使用js的语法,就可以写后端了:c写了网络,文件操作,数据库操作
        -js的语法,运行在操作系统上的一个解释型后端语言
        
    - vue-cli:vue脚手架  是node的一个模块
    
    
# 安装node环境
	-官网下载安装包:node-v18.16.1-x64.msi 一路下一步安装
	-node---》python的python命令
    -npm---》python的pip命令
    	-下载模块,去国外,很慢
        -加速下载第三方模块:(用来替换npm命令的)
        npm install -g cnpm --registry=https://registry.npm.taobao.org
        -安装模块使用:npm install 
        -现在使用  cnpm install  速度快
        
        
# 安装vue脚手架
cnpm install -g @vue/cli
安装完就会释放 vue 令   #装完django 释放了django-admin一样,用来创建项目


# 使用vue脚手架,创建vue项目
vue create 项目名
操作如下图


# 另一种创建vue项目方式:图形化界面
	

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

4 vue项目目录介绍

# 使用pycharm开发

# 运行vue项目的两种方式
	-使用名:npm run dev
    -使用pycharm运行:绿色箭头
    
    
# 目录结构
first_vue  #项目名
	-node_modules  # 项目有很多依赖都放在这,等同python的 .venv文件夹,可以删掉,非常多小文件,复制很慢,如果没了,执行 cnpm install  就可以在装上,装完项目可以运行
    -public # 文件夹(一般不动)
        favicon.ico # 网站小图标
    	index.html # spa:单页面应用---》整个vue项目其实就这一个html页面,以后都是组件切换
    -src # 开发重点,以后代码几乎都是写在这里
    	-assets   # 放一些静态资源:图片,css,js
        	-logo.png  # 组件中使用的图片
        -components # 放组件:小组件
        	-HelloWorld.vue  # 默认提供给咱们的
        -views      # 放组件:页面组件
            HomeView.vue # 首页
            AboutView.vue#关于
        -router # 装了vue-router就会有这个文件夹,后面讲
        	-index.js
        -store # 装 vuex 就会有这个文件夹,后面讲
        	-index.js
        -main.js # 整个项目的入口
        -App.vue #根组件
        
    -.gitignore  # 使用了git,忽略文件
    -babel.config.js #装了bable就会生成它---》语法转换--》可以写es高版本语法
    -package.json  # 放了项目的依赖
    -package-lock.json # 锁定文件--》锁定依赖的版本
    -README.md  #介绍文件
    -vue.config.js # vue配置文件 一般不动

在这里插入图片描述

4.1 大致看一下文件中写了什么内容

# index.html  单页面应用,全局只有一个html
	-不能禁用js,否则,vue项目执行不力
    -div  id是app,跟咱们之前写的一样
    
# HelloWorld.vue   组件化开发,开发阶段,以后再vue项目中,写组件  写 xx.vue
    template:在这里写 html内容
    script:在这里写js
    style:在这里写样式
    
    之前写组件
    #组件名字就是:HelloWorld 文件名
    # template:template内写的内容
    # data(){} :在script中
    <script>
        export default {
          data(){
            return {}
          },
         methods:{}
        }
	</script>
    
    # 之前不能写独立的css,以后都写在 style中
	#总结:之前定义组件,写起来很麻烦,现在定义组件,只要创建一个 xx.vue,在固定的位置,写固定的代码即可
    
    
# main.js--》控制  index.html 使用哪个跟组件 ---App.vue
	-import store from './store' # 导入语法
    - 在这里 new 了vue实例
    new Vue({
      render: h => h(App)
    }).$mount('#app')
    
    
# package.json 里面有项目依赖

5 vue项目开发规范

# 以后做vue开发,只需要创建 组件 
	xx.vue
    
# 会有三部分
##第一部分###  写html,插值,事件绑定
<template>
</template>


##第二部分###  data,methods,watch,created
<script>
export default {
}
</script>

##第三部分###   写样式
<style scoped>
</style>

6 es6导入导出语法

# 以后,做了项目开发,肯定要导入某些模块使用
	-之前是使用<script src=""></script>
    -以后再项目中:import App from './App.vue'  语法引入
    
    
# 默认导出和默认导入的使用
	#在utils.js中 ,导出
    var NAME = '彭于晏'
    function add(a, b) {
        return a + b
    }
    export default { #导出
        add,
        NAME
    }
    # 在想用的位置导入
	import lqz from './lqz/utils' # 以后使用lqz代指就是导出的对象






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

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

相关文章

天机学堂第11天 异步领劵

目录 优化思路分析 缓存数据结构 异步领券 优化思路分析 高并发写优化的几种思路 合并写请求比较适合应用在写频率较高&#xff0c;写数据比较简单的场景。而异步写则更适合应用在业务比较复杂&#xff0c;业务链较长的场景。 显然&#xff0c;领券业务更适合使用异步写方…

排序(直接插入,希尔,选择,快排)

文章目录 插入排序直接插入排序希尔排序 选择排序直接选择排序堆排序 交换排序冒泡排序&#xff1a;快速排序&#xff08;hoare版本&#xff09;快速排序优化&#xff08;三数取中&#xff09;快速排序优化&#xff08;小区间优化&#xff09; 快速排序&#xff08;挖坑法&…

Unity转Unreal5从入门到精通之UMG的使用

前言 UMG (Unreal Motion Graphics UI Designer)是Unreal种的可视化 UI 工具。它就类似于Unity中的UGUI,可用于为用户创建游戏内 HUD、菜单和其他与界面相关的图形。 UMG 的核心是UI控件。它可用于创建UI界面&#xff08;按钮、复选框、滑块、进度条等&#xff09;。 快速入…

HiveSQL实战——大数据开发面试高频SQL题

查询每个区域的男女用户数 0 问题描述 每个区域内男生、女生分别有多少个 1 数据准备 use wxthive; create table t1_stu_table (id int,name string,class string,sex string ); insert overwrite table t1_stu_table values(4,张文华,二区,男),(3,李思雨,一区,女),(1…

linux -- Git基础使用

git是什么 简单说来Git是一个开源的分布式版本控制系统&#xff0c;那么什么是分布式呢&#xff0c;就是每个开发者拥有完整的本地仓库副本&#xff0c;包括所有历史记录和分支&#xff0c;可以独立工作&#xff0c;并通过合并来同步变更。 git优点 速度极快 Git在合并、分…

嵌入式 - 什么是数字晶体管

What is a digital transistor? 数字晶体管是一种集成电阻器的双极晶体管。 A digital transistor is a bipolar transistor that integrates resistors. Concerning internal resistor R1 / 关于内部电阻 R1 R1 的作用是通过将输入电压转换为电流来稳定晶体管的工作。 如果…

【秋招笔试】8.17京东秋招第二场(后端岗)-三语言题解

🍭 大家好这里是 春秋招笔试突围,一起备战大厂笔试 💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 编程一对一辅导 ✨ 本系列打算持续跟新 春秋招笔试题 👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸 ✨ 笔试合集传送们 -> 🧷春秋招笔试合集 🍒 本专栏已收…

Nginx:高效HTTP服务器与反向代理

Nginx&#xff1a;高效HTTP服务器与反向代理 1、核心特点2、应用场景 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; Nginx&#xff0c;一个开源的HTTP服务器与反向代理工具&#xff0c;因其高性能、低资源消耗而备受推崇。以下是Nginx的几…

Python 全栈系列261 使用apscheduler

说明 任务可以分为两种&#xff1a; 1 静态(存量)任务2 动态(增量)任务 对于静态任务来说&#xff0c;一般可以事先分好大小均匀的若干block任务&#xff0c;这时候比较强调使用分布式系统进行快速处理&#xff1b;对于动态任务来说&#xff0c;主要按时间区块大小划分。对于…

[JAVA] Java中如何使用throws语句声明异常类型

如果一个方法可能会出现异常&#xff0c;但没有能力处理这种异常&#xff0c;可以在方法声明处用throws子句来声明抛出异常 — throws语句用在方法定义时声明该方法要抛出的异常类型 public void method() throws Exception1,Exception2,...ExceptionN{//可能产生异常的代码 }…

LVS配置

基础介绍 http://t.csdnimg.cn/Lv5Byhttp://t.csdnimg.cn/Lv5By 部署NAT模式集群案例 实验环境 主机名 IP vip 角色 node1 192.168.0.100 172.25.254.100 调度器&#xff08; VS &#xff09; node1 192.168.0.101 &#xff0c; GW 192.168.0.100 \ 真实服务器&#…

HarmonyOS开发案例:创建全局自定义组件复用池-BuilderNode

介绍 本示例是全局自定义组件复用实现的示例代码&#xff0c;主要讲解如何通过BuilderNode创建全局的自定义组件复用池&#xff0c;实现跨页面的组件复用。 效果图预览 使用说明 继承NodeController&#xff0c;实现可复用的NodeItem组件。使用单例模式创建NodePool组件复用…

leetcode算法题之N皇后

N皇后也是一道很经典的问题&#xff0c;问题如下&#xff1a; 题目地址 按照国际象棋的规则&#xff0c;皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上&#xff0c;并且使皇后彼此之间不能相互攻击。 给你…

2:html:基础语法2

目录 2.1图像的一些注意点 2.2表格 2.2.1基本的表格 2.2.2表头与边框 2.3列表 2.3.1无序列表 2.3.2有序列表 2.4块 2.4.1块级元素 2.4.2内联元素 2.1图像的一些注意点 在上一篇中&#xff0c;我们已经知道了怎么样去将图片运用到我们的网站中&#xff0c;但是这里还…

荣耀Magicbook x14 扩容1TB固态

版权归作者所有&#xff0c;如有转发&#xff0c;请注明文章出处&#xff1a;https://cyrus-studio.github.io/blog/ 固态硬盘规格 在官网查看加装固态硬盘的接口规格 https://www.honor.com/cn/laptops/honor-magicbook-x14-2023/ https://club.honor.com/cn/thread-2847379…

XYplorer v26.30.0200绿色版

软件介绍 XYplorers是一款多标签文件管理器&#xff0c;支持多标签页栏&#xff0c;浏览文件管理时就跟使用Chrome之类的浏览器感觉一般&#xff0c;从浏览方便性&#xff0c;和切换滑顺程度&#xff0c;要比原本Windows10的Explorer文件管理器要得多。可以大部分程度上替代系…

树莓派5环境配置笔记 新建虚拟python环境—安装第三方库—配置Thonny解释器

树莓派5虚拟环境配及第三方库的安装&#x1f680; 在完成了树莓派的系统下载和各项基础配置之后进入到了&#xff0c;传感器开发部分&#xff0c;在测试传感器开发之前我打算先安装一下自己需要的库&#xff0c;但是在我直接在系统的根目录下运行pip命令的时候总会报环境错误&a…

sudo执行带重定向命令时仍提示无权限:Permission denied问题详解以及linux里的更高效下载命令mwget安装和使用效率对比

一、sudo执行带重定向命令时仍提示无权限&#xff1a;Permission denied问题详解 小问题&#xff0c;在此记录一下&#xff0c;有时在shell下执行命令重定向到文件时提示无权限-bash: temp_20181015.log: Permission denied&#xff0c;而且加sudo执行依提示无权限&#xff0c;…

CDD数据库文件制作(四)——Data Type(0x22/0x2E)

文章目录 1、新建Data Type步骤2、Data Types类型2.1 raw value2.1.1 ASCII读取和写入:零件号…2.1.2 “多字节的十六进制” 读取和写入:密钥,种子…2.1.3 “多字节的十进制” 读取和写入:参数标定和显示2.2 text table2.3 Linear2.3.1 分辨率和偏移量非1和0的读取和写入2.…

linux:进程优先级、环境变量、地址空间

进程优先级 什么叫进程优先级&#xff1f; 进程优先级是指进程获取某些资源的先后顺序 上文中的task_struct&#xff0c;也叫进程控制块&#xff08;PCB&#xff09;&#xff0c;本质上是结构体&#xff0c;我们的优先级就被写在结构体里面&#xff08;内部字段&#xff09;…