vue知识-05

聊天室案例(django接口)

# chat.hetm<<script src="/static/axios.js"></script><script src="/static/vue.js"></script><body>
<div id="app"><h1>聊天室</h1><button @click="handleShow">打开/关闭聊天室</button><hr><Child v-if="show"></Child><hr>
</div>
</body>
<script>Vue.component('Child',{template:`<div><h3>聊天室来咯</h3><p v-for="item in chatList">{{ item.name }}说:{{ item.content }}</p><hr>姓名:<input type="text" v-model="name"><input type="text" v-model="content"><button @click="handleSend">发送</button></div>`,data(){return{chatList:[{"name":"张三","content":"你好"},{"name":"徐飞飞","content":"早上好"},{"name":"周佳佳","content":"早"},],name: '',content: ''}},methods:{handleSend(){axios.get(`http://127.0.0.1:8000/chat/send/?from_user=${this.name}&content=${this.content}`).then(res =>{if (res.data.code == 100) {alert(this.data.msg)} else {alert(this.data.msg)}})}},// 生命周期函数creat里面发送数据到后端created(){// 创建定时器this.t = setInterval(() => {// 发送ajax请求axios.get('http://127.0.0.1:8000/chat/').then(res => {console.log(res.data)this.chatList=res.data.results})}, 3000)},beforeDestroy() {clearInterval(this.t) // 销毁定时器this.t = null}})var app=new Vue({el: '#app',data: {show: false},methods: {handleShow() {this.show = !this.show}}})
</script>
# views.py
from rest_framework.viewsets import GenericViewSet
from rest_framework.response import Response
from .models import Chat
from rest_framework.decorators import action
from .serializers import ChatSerializerclass ChatView(GenericViewSet):serializer_class = ChatSerializerqueryset = Chat.objects.all()# 127.0.0.1:8000/chat/send/?from_user=1&content=hello---GET@action(methods=['GET'], detail=False)def send(self, request):from_user = request.query_params.get('from_user')content = request.query_params.get('content')Chat.objects.create(from_user=from_user, content=content)return Response({'code': 100, 'msg': '发送成功'}, headers={'Access-Control-Allow-Origin': '*'})# 127.0.0.1:8000/chat/def list(self, request):qs = self.get_queryset()ser = self.get_serializer(instance=qs, many=True)return Response({'code': 100, 'msg': '查询成功', 'result': ser.data})
# serializer.py
from rest_framework import serializers
from .models import Chatclass ChatSerializer(serializers.ModelSerializer):class Meta:model = Chatfields = '__all__'
# moedels.py
rom django.db import modelsclass Chat(models.Model):from_user = models.CharField(max_length=32, verbose_name='发送者')content = models.CharField(max_length=256, verbose_name='发送内容')ctime = models.DateTimeField(auto_now_add=True, verbose_name='发送时间')
# setting.py
STATIC_URL = '/static/'
STATICFILES_DIRS = [os.path.join(BASE_DIR, "static")
]DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'chat01','HOST': '127.0.0.1','POST': 3306,'USER': 'root','PASSWORD': 'JIAJIA',}
}

ref属性(组件间通信)

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

        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')}}})

动态组件component

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

<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>

keep-alive组件缓存

# 组件缓存:但切换回来时,输入的input值还是存在的

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

插槽和具名插槽

# 背景:一般编写完1个组件之后组件的内容都是写死的,加数据需去组件中修改,扩展性差
# 作用:  1、一般在组件<Child>  </Child>中插入<div>或者其他是没有效果的

                2、组件中添加<slot></slot>,就可以在的组件标签中添加内容

基本使用:

<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>

具名插槽:指定某一插槽加入组件样式    <slot name="foot"></slot>

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

vue-cli创建项目

# 创建vue项目,需要借助于几个东西:
   nodejs:
        1、javascript只能运行在浏览器中
        2、把谷歌浏览器的js解释环境---使用c重写,能够运行在操作之上
        3、使用js的语法,就可以写后端了(c写了网络,文件操作,数据库操作)
        4、js的语法,运行在操作系统上的一个解释型后端语言
    vue-cli:vue脚手架,是node的一个模块
# 安装node环境:
1、官网下载安装包:node-v18.16.1-x64.msi 
                    node:python的python命令
                    npm:python的pip命令
2、加速下载第三方模块:(用来替换npm命令的)

        安装模块使用:npm install  ---->现在使用  cnpm install  速度快       

npm install -g cnpm --registry=https://registry.npm.taobao.org

3、安装vue脚手架

        安装完就会释放 vue令     #装完django 释放了django-admin一样,用来创建项目

cnpm install -g @vue/cli

4、使用vue脚手架,创建vue项目:

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

vue项目目录介绍

# 运行vue项目的两种方式:
            使用名:npm run dev
            使用pycharm运行:绿色箭头


# 目录结构:
firstvue-项目名


node_modules--存放项目依赖

        等同python的 .venv文件夹,可以删掉,非常多小文件,复制很慢,

        如果没了,执行 cnpm install  就可以在装上,装完项目可以运行
public--文件夹(一般不动)
        favicon.ico   网站小图标
        index.html   单页面应用, 整个vue项目其实就这一个html页面,以后都是组件切换


src --开发重点,以后代码几乎都是写在这里


   assets-- 放一些静态资源, 组件中使用的图片,css,js
   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配置文件 一般不动

vue项目文件

# index.html单页面应用,全局只有一个html
            不能禁用js,否则vue项目执行不力
            div  id是app,跟咱们之前写的一样
 # HelloWorld.vue组件化开发,开发阶段,以后在vue项目中,写组件  写 xx.vue
    template:在这里写 html内容
    script:在这里写js
    style:在这里写样式
# 之前写组件:

        之前不能写独立的css,以后都写在 style中

        总结:现在定义组件,只要创建一个 xx.vue,在固定的位置,写固定的代码即可

#组件名字就是:HelloWorld 文件名template:template内写的内容data(){} :在script中<script>export default {data(){return {}},methods:{}}</script>

# main.js:控制 index.html 使用哪个跟组件 ---App.vue

import store from './store' //导入语法
// 在这里 new 了vue实例new Vue({render: h => h(App)}).$mount('#app')

# package.json :里面有项目依赖

vue项目开发规范

# 以后做vue开发,只需要创建组件 xx.vue
# 有三部分:
        第一部分--写html,插值,事件绑定        # <template>
        第二部分--data,methods,watch,created    # <script>

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

es6导入导出语法

# 以后,做了项目开发,肯定要导入某些模块使用

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.mzph.cn/news/623605.shtml

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

相关文章

从事铁路工作保护足部,穿什么劳保鞋更安全

铁路运输在我国交通运输业中起着骨干作用&#xff0c;为国民经济的可持续发展和人口流动做出了巨大贡献。安全是铁路运输不可忽视的问题&#xff0c;在作业场地随处能见到“安全就是生命&#xff0c;责任重于泰山”的安全标语&#xff0c;由此可见安全问题是放在首位的。 铁路施…

PyTorch深度学习实战(30)——Deepfakes

PyTorch深度学习实战&#xff08;30&#xff09;——Deepfakes 0. 前言1. Deepfakes 原理2. 数据集分析3. 使用 PyTorch 实现 Deepfakes3.1 random_warp.py3.2 Deepfakes.py 小结系列链接 0. 前言 Deepfakes 是一种利用深度学习技术生成伪造视频和图像的技术。它通过将一个人的…

学习Vue配置代理总结

今天学习了Vue的配置代理&#xff0c;当我们想要向服务器取回来数据时就先要向服务器发送请求&#xff0c;但前端发送请求的方式也有很多种&#xff0c;首先是发送请求的鼻祖JS的XMLHttpRequest&#xff08;xhr&#xff09;&#xff0c;它操作起来相对麻烦&#xff0c;开发中也…

SpringBoot自定义Starter(@EnableXXX和META-INF的SPI自动添加)

目录 1. 自定义Starter1.1 场景和效果1.2 starter实现1.2.1 创建自定义starter项目1.2.2 把所有maven依赖导入1.2.3 实现公共代码逻辑1.2.4 添加方式一&#xff1a;实现RobotAutoConfiguration配置类1.2.5 添加方式二&#xff1a;实现RobotAutoConfiguration配置类 EnableRobo…

Linux下如何快速调试I2C设备

Linux下如何快速调试I2C设备 目录 1 什么场景下需要快速调试I2C设备 2 如何快速调试I2C设备 3 如何获取I2C Tools工具集 3.1 获取I2C Tools工具集源码 3.2 编译I2C Tools工具集源码 3.3 为设备添加I2C Tools工具集 4 如何使用I2C Tools工具集 5 小结 1 什么场景下需要快…

强化app广告变现用户隐私合规,移动广告变现合规技巧

移动广告技术的发展帮助开发者极大提升了广告变现效率&#xff0c;APP作为用户个人信息处理的重要载体&#xff0c;自从《个人信息保护法》颁布以来&#xff0c;个人信息的使用已经成为监管重点&#xff0c;开发者强化合规意识&#xff0c;让广告变现业务“细水长流”&#xff…

Ansible Filter滤波器的使用

一、【说在前面】 Ansible Filter一般被称为滤波器或者叫过滤器。 这个东西初次听到以为是什么科学计算的东西&#xff0c;但是想来ansible不太可能有什么滤波操作&#xff0c;所以这个东西本质是一个数值筛选器&#xff0c;内置函数&#xff0c;本质是一个为了做区别化的工具…

AcrelEMS-CB商业建筑能源管理系统解决方案-安科瑞 蒋静

1概述 AcrelEMS-CB商业建筑能源管理系统&#xff0c;集电力监控、电能质量监测与治理、电气安全预警、能耗分析、照明控制、新能源使用、能源收费以及设备运维等功能于一体&#xff0c;通过一套系统对商业建筑的能源进行统一监控、统一运维和调度&#xff0c;系统可以通过WEB和…

【极光系列】springBoot集成Hibernate

【极光系列】springboot集成hibernate gitee地址 直接下载可用 https://gitee.com/shawsongyue/aurora.git 模块&#xff1a;aurora_hibernate mysql安装教程 参考我另外一篇文章&#xff0c;直接下载安装 https://blog.csdn.net/weixin_40736233/article/details/1355829…

FPGA 原理图细节--画引脚

BGA引脚表示 1.1 FPGA此引脚要正确和清晰&#xff0c;会在“Package Pin”中用到次物理接口 1.2, MCU 只用管对应的GPIO逻辑接口就可以了 标识Bank电平 标识出对应Bank的电平&#xff0c;在电路设计中可以清晰的知道对应的脚位输出电平。在"IO std"也方便的选择 Ea…

常见的限流算法

本文已收录至我的个人网站&#xff1a;程序员波特&#xff0c;主要记录Java相关技术系列教程&#xff0c;共享电子书、Java学习路线、视频教程、简历模板和面试题等学习资源&#xff0c;让想要学习的你&#xff0c;不再迷茫。 天下武学出同源 正所谓天下武学殊途同归&#xff…

N5181A/安捷伦Agilent N5181A信号发生器

181/2461/8938产品概述&#xff1a; 规格&#xff08;说明书&#xff09;&#xff1a;表示已校准的仪器在工作温度范围0-55C内存放至少2小时&#xff0c;除非另有说明&#xff0c;并经过45分钟预热期后的保证性能。的指标包括测量不确定度。除非另有说明&#xff0c;本文档中的…

【Python数据可视化】matplotlib之绘制高级图形:散点图、热力图、等值线图、极坐标图

文章传送门 Python 数据可视化matplotlib之绘制常用图形&#xff1a;折线图、柱状图&#xff08;条形图&#xff09;、饼图和直方图matplotlib之设置坐标&#xff1a;添加坐标轴名字、设置坐标范围、设置主次刻度、坐标轴文字旋转并标出坐标值matplotlib之增加图形内容&#x…

全自动洗衣机什么牌子好?内衣洗衣机便宜好用的牌子推荐

随着内衣洗衣机的流行&#xff0c;很多小伙伴在纠结该不该入手一款内衣洗衣机&#xff0c;专门来洗一些贴身衣物&#xff0c;答案是非常有必要的&#xff0c;因为我们现在市面上的大型洗衣机只能做清洁&#xff0c;无法对我们的贴身衣物进行一个高度除菌&#xff0c;而小小的内…

基于python的深度神经网络原理与实践

理论基础 什么是神经网络 我们知道深度学习是机器学习的一个分支&#xff0c;是一种以人工神经网络为架构&#xff0c;对数据进行表征学习的算法。而深度神经网络又是深度学习的一个分支&#xff0c;它在 wikipedia 上的解释如下&#xff1a; 深度神经网络&#xff08;Deep N…

Vue中keep-alive缓存的详解(深度理解)

文章目录 一、Keep-alive 是什么二、使用场景三、原理分析四、思考题&#xff1a;缓存后如何获取数据beforeRouteEnteractived 参考文献 一、Keep-alive 是什么 keep-alive是vue中的内置组件&#xff0c;能在组件切换过程中将状态保留在内存中&#xff0c;防止重复渲染DOM ke…

四搭建dockerhub私有仓库

搭建dockerhub私有仓库 很多场景下&#xff0c;我们需使用私有仓库管理Docker镜像。相比Docker Hub&#xff0c;私有仓库有以下优势&#xff1a; 节省带宽&#xff0c;对于私有仓库中已有的镜像&#xff0c;无需从Docker Hub下载&#xff0c;只需从私有仓库中下载即可&#x…

MySQL篇—通过Clone插件进行远程克隆数据(第三篇,总共三篇)

在介绍 Clone 最终篇之前&#xff0c;我们先简要回顾一下前面所讲的内容。在第一篇中&#xff0c;我们探讨了 Clone 的用途、使用的前提条件、存在的限制&#xff0c;以及它的备份原理。Clone 是一种用于复制和备份数据的工具&#xff0c;它能够快速高效地创建数据的精确副本。…

Spark原理——逻辑执行图

逻辑执行图 明确逻辑计划的边界 在 Action 调用之前&#xff0c;会生成一系列的RDD,这些RDD之间的关系&#xff0c;其实就是整个逻辑计划 val conf new SparkConf().setMaster("local[6]").setAppName("wordCount_source") val sc new SparkContext(conf)v…

JVM篇--Java内存区域高频面试题

java内存区域 1 Java 堆空间及 GC&#xff1f; 首先我们要知道java堆空间的产生过程&#xff1a; 即当通过java命令启动java进程的时候&#xff0c;就会为它分配内存&#xff0c;而分配内存的一部分就会用于创建堆空间&#xff0c;而当程序中创建对象的时候 就会从堆空间来分…