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

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代指就是导出的对象






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

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

相关文章

Leetcode JAVA刷刷站(38)外观数列

一、题目概述 二、思路方向 为了解决这个问题&#xff0c;我们可以编写一个Java函数countAndSay&#xff0c;该函数接受一个整数n作为输入&#xff0c;并返回外观数列的第n个元素。这个函数将基于递归公式来构建数列&#xff0c;其中countAndSay(1) "1"&#xff0c;…

pycharm windows/mac 指定多版本python

一、背景 工作中经常会使用不同版本的包&#xff0c;如同时需要tf2和tf1&#xff0c;比较新的tf2需要更高的python版本才能安装&#xff0c;而像tf1.5 需要低版本的python 才能安装&#xff08;如 python3.6&#xff09;,所以需要同时安装多个版本。 二、安装多版本python py…

网络安全之XSS基础

从 XSS Payload 学习浏览器解码 xss payload 1.<a href"%6a%61%76%61%73%63%72%69%70%74:%61%6c%65%72%74%28%31%29">1</a> 2.<a href"&#x6a;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;:…

SpringBoot+Vue在线商城(电子商城)系统-附源码与配套论文

摘 要 随着互联网技术的发展和普及&#xff0c;电子商务在全球范围内得到了迅猛的发展&#xff0c;已经成为了一种重要的商业模式和生活方式。电子商城是电子商务的重要组成部分&#xff0c;是一个基于互联网的商业模式和交易平台&#xff0c;通过网络进行产品和服务的销售。…

【题目/训练】:双指针

引言 我们已经在这篇博客【算法/学习】双指针-CSDN博客里面讲了双指针、二分等的相关知识。 现在我们来做一些训练吧 经典例题 1. 移动零 思路&#xff1a; 使用 0 当做这个中间点&#xff0c;把不等于 0(注意题目没说不能有负数)的放到中间点的左边&#xff0c;等于 0 的…

Unity项目优化记录

背景&#xff1a;测试反馈项目组游戏存在内存泄露&#xff0c;来找到中台这边协调排查。好家伙&#xff0c;跑了两次看了内存快照&#xff0c;再看资源组织和管理方式&#xff0c;存在的问题确实比较多。 1、修复内存泄露&#xff1a;结算界面由于资源引用丢失导致整个面板不会…

景联文科技高质量文本标注:驱动自然语言处理技术的发展与应用

文本标注是自然语言处理&#xff08;NLP&#xff09;领域的一个重要环节&#xff0c;是指在文本数据上添加额外的信息或标记的过程&#xff0c;目的是为了让计算机能够理解和处理这些文本数据。 通过文本标注&#xff0c;可以为文本中的各个部分提供具体的含义和上下文信息&…

基于vue全家桶的pc端仿淘宝系统_kebgy基于vue全家桶的pc端仿淘宝系统_kebgy--论文

TOC springboot478基于vue全家桶的pc端仿淘宝系统_kebgy基于vue全家桶的pc端仿淘宝系统_kebgy--论文 绪 论 1.1开发背景 改革开放以来&#xff0c;中国社会经济体系复苏&#xff0c;人们生活水平稳步提升&#xff0c;中国社会已全面步入小康社会。同时也在逐渐转型&#xf…

这个是git使用的合集

如果遇到了关于git和github的bug就会写这里 2024/8/16 github一直没有打卡和上传代码是因为感觉除了做项目的情况&#xff0c;普通的学习和普通的笔记没必要记在github里&#xff1b;如果是笔记类的东西为什么不记在csdn上呢&#xff1f;如果是算法题算法网站上回有记录啊&am…

Cacti SQL注入漏洞分析(CVE-2023-51448)

Cacti 为全球用户提供强大且可扩展的运营监控和故障管理框架。它还是一个完整的网络绘图解决方案&#xff0c;旨在利用RRDTool的数据存储和绘图功能。Cacti 包括一个完全分布式和容错的数据收集框架、用于设备、图表和树的高级基于模板的自动化功能、多种数据采集方法、通过插件…

Vue2 和 Vue3中EventBus使用差异

目录 前言一、EventBus 和 mitt 的对比二、Vue 2 中的 EventBus 使用实例2.1 创建 EventBus2.2 在组件中使用 EventBus2.2.1 组件 A - 发送事件2.2.2 组件 B - 监听事件 2.3 注意事项 三、Vue 3 中的 mitt 使用实例3.1 安装 mitt3.2 创建 mitt 实例3.3 在组件中使用 mitt3.3.1 …

DHU OJ 二维数组

思路及代码 #include<iostream> using namespace std; int main(){ //input 多组 //input M,N int 1< <20 //input M 行 N 列 数据 //initialize listint M, N;while (cin >> M >> N){int list[M][N];for (int i 0; i < M-1; i){for (int j 0; j…

Python编写Word文档

目录 0. 安装依赖 1. 创建word文档 2. 添加标题、居中、字体16大小 3. 添加标题一 4. 添加一段话并设置字体颜色 封装函数 5. 换页 6. 插入表格 0. 安装依赖 python-docx1.1.2 1. 创建word文档 from docx import Documentdoc Document() 2. 添加标题、居中、字体1…

计算机网络面试题汇总

文章目录 计算机网络基础计算机网络体系结构(网络分层模型)OSI 七层模型是什么?每一层的作用是什么?TCP/IP 四层模型是什么?每一层的作用是什么?五层体系结构以及对应的协议为什么网络要分层,分层的好处?常见网络协议有哪些,每一层常见协议有哪些?应用层有哪些常见的协…

24/8/18算法笔记 目标导向强化学习

目标导向强化学习&#xff08;Goal-Oriented Reinforcement Learning&#xff0c;简称GORL&#xff09;是强化学习的一个分支&#xff0c;它关注于智能体如何通过与环境的交互来实现特定的目标或任务。与传统的强化学习不同&#xff0c;目标导向强化学习更加关注目标的设定和达…

一元二次方程系数

前言&#xff1a;刚刚开始写的时候也想到了先求出两个的解&#xff0c;但是没想到最后正负数系数怎么处理 且我才知道求解gcd是可以负数和正数的 #include<bits/stdc.h> using namespace std;#define int long long int t; int a,b,c;void solve(){cin >> a >&…

spfa()算法(求最短路)

spfa算法是对bellman_ford算法的优化&#xff0c;大部分求最短路问题都可以用spaf算法来求。 注意&#xff1a; &#xff08;1&#xff09;如若图中有负权回路&#xff0c;不能用spfa算法&#xff0c;要用bellman_ford算法&#xff1b;若只有负权边&#xff0c;则可以用 spf…

得到任务式 大模型应用开发学习方案

根据您提供的文档内容以及您制定的大模型应用开发学习方案&#xff0c;我们可以进一步细化任务式学习的计划方案。以下是具体的任务式学习方案&#xff1a; 任务设计 初级任务 大模型概述&#xff1a;阅读相关资料&#xff0c;总结大模型的概念、发展历程和应用领域。深度学…

vue3响应式工具 toRefs() 和 toRef()

前言 直接解构响应式对象的属性进行赋值给新的变量&#xff0c;会导致新变量失去响应式。 当修改新变量的值时&#xff0c;不会触发原始响应式对象的更新&#xff0c;从而在模板中也不会有相应的视图更新。 示例&#xff1a; <template><div><p>姓名: {{ …

案例分享—国外深色UI界面设计赏析

在国外&#xff0c;深色界面设计&#xff08;Dark Mode&#xff09;已成为提升用户体验的重要趋势。它不仅有效减少屏幕亮度&#xff0c;保护用户视力&#xff0c;还能在夜晚或低光环境下提供更加舒适的浏览体验。设计师们普遍认识到&#xff0c;深色主题不仅提升了应用的视觉层…