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,一经查实,立即删除!

相关文章

解读vue配置文件(vue.config.js)

use strict const path require(path) const defaultSettings require(./src/settings.js) const CompressionPlugin require(compression-webpack-plugin)function resolve(dir) {return path.join(__dirname, dir) }const name defaultSettings.title // 网址标题 const …

浏览器事件循环(事件轮询)

浏览器事件循环(事件轮询) 文章目录 浏览器事件循环(事件轮询)1.浏览器事件循环流程2.同步任务、异步任务、宏任务和微任务概念同步任务&#xff1a;异步任务&#xff1a;宏任务&#xff1a;微任务&#xff1a; 3.宏任务和微任务区别异步任务的分类&#xff1a;异步任务执行顺序…

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

铁路运输在我国交通运输业中起着骨干作用&#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 是一种利用深度学习技术生成伪造视频和图像的技术。它通过将一个人的…

用python实现word中所有图片变清晰

要使用Python将Word文档中的所有图片变清晰&#xff0c;你需要使用一些库&#xff0c;例如python-docx和OpenCV。以下是一个简单的示例&#xff0c;说明如何使用这些库来提高Word文档中图片的清晰度。 请注意&#xff0c;这种方法基于简单的图像增强技术&#xff0c;可能无法提…

学习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…

大数据日志数据量过大如何处理

如果是web端的埋点数据&#xff0c;我们可以对这些数据进行分流。 我们可以采用事件分流&#xff0c;步骤如下 定义事件类型&#xff1a; 根据埋点数据的内容&#xff0c;定义不同的事件类型。例如&#xff0c;可以有页面访问事件、按钮点击事件、表单提交事件等。 提取关键信…

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

QT基础篇(6)QT5图形与图片

1.QT5位置相关函数 在Qt5中&#xff0c;有一些与位置相关的函数可以帮助您处理窗口和控件的位置。下面是一些常用的位置相关函数&#xff1a; move(x, y): 将窗口或控件移动到屏幕上的指定位置&#xff0c;其中x和y表示要移动到的坐标。 resize(width, height): 调整窗口或控…

go切片参数传递用值还是指针

Go 中常用的切片 slice 数据结构是动态数组&#xff0c;切片长度并不固定&#xff0c;在容量不足的时候会自动扩容。 切片实质上是对一个底层数组的抽象视图&#xff0c;由 Go 运行时维护。在运行时&#xff0c;切片由如下的 SliceHeader 结构体表示&#xff0c;其中 Data 字段…

机器人说明书---名词解释030课_python语言_方法重写

这里写自定义目录标题 方法重写类属性与方法类的私有属性类的方法类的私有方法实例类的私有方法实例如下&#xff1a; 类的专有方法&#xff1a;视频讲解 方法重写 如果你的父类方法的功能不能满足你的需求&#xff0c;你可以在子类重写你父类的方法&#xff0c;实例如下&…

【极光系列】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…

数据库负载均衡部署(使用ipvadm ,docker)

文章目录 … 要在Docker中使用IPVS配置MariaDB数据库的高可用集群&#xff0c;并设置VIP地址为192.168.201.4&#xff0c;密码全部设为123456你可以按照以下步骤进行操作&#xff1a; 第一步 创建一个docker网络 docker network create --subnet192.168.200.0/24 mariadb_netw…

FPGA 原理图细节--画引脚

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

芯片设计重要工具—— IBM LSF 分布式高性能计算调度平台

IBM Spectrum LSF Suites 是面向分布式高性能计算 (HPC) 的工作负载管理平台和作业调度程序。基于 Terraform 的自动化现已可用&#xff0c;该功能可在 IBM Cloud 上为基于 IBM Spectrum LSF 的集群供应和配置资源。 借助我们针对任务关键型 HPC 环境的集成解决方案&#xff0…

常见的限流算法

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