补充
1.图片 在接口中返回一些数据和图片地址,而不是图片的二进制内容 {code:100,msg:'成功',img:地址} 2.md5 不是加密, 摘要算法
动态组件
<component :is="who"></component> component标签的is属性等于组件名字,这里就会显示这个组件
HTML
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <link href="https://cdn.bootcdn.net/ajax/libs/twitter- <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script> <title>Title</title> </head> <body> <div id="box"> <button @click="who='home'">首页</button> <button @click="who='good'">商品</button> <button @click="who='price'">价格</button> <component :is="who"></component> </div> </body> <script> let home = { template: ` <div> <h1>我是首页</h1> </div>` } let good = { template: ` <div> <h1>我是商品</h1> </div>` } let price = { template: ` <div> <h1>我是价格</h1> </div>` } var vm = new Vue({ el: '#box', data: { who:home }, methods: {}, components: { home, good, price } }) </script> </html> </html
笨方法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet"> <script src="https://cdn.staticfile.org/jquery/2.1.1/jquery.min.js"></script> <script src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.3.6/js/bootstrap.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> <script src="https://unpkg.com/axios/dist/axios.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script> <title>Title</title> </head> <body> <div id="box"> <button @click="who='home'">首页</button> <button @click="who='good'">商品</button> <button @click="who='price'">价格</button> <hr> <home v-if="who=='home'"></home> <good v-else-if="who=='good'"></good> <price v-else></price> </div> </body> <script> let home = { template: ` <div> <h1>我是首页</h1> </div>` } let good = { template: ` <div> <h1>我是商品</h1> </div>` } let price = { template: ` <div> <h1>我是价格</h1> </div>` } var vm = new Vue({ el: '#box', data: { who: home }, methods: {}, components: { home, good, price } }) </script> </html> </html
keep_alive:作缓存处理
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet"> <script src="https://cdn.staticfile.org/jquery/2.1.1/jquery.min.js"></script> <script src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.3.6/js/bootstrap.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> <script src="https://unpkg.com/axios/dist/axios.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script> <title>Title</title> </head> <body> <div id="box"> <button @click="who='home'">首页</button> <button @click="who='good'">商品</button> <button @click="who='price'">价格</button> <hr> <keep-alive> <component :is="who"></component> </keep-alive> </div> </body> <script> let home = { template: ` <div> <h1>我是首页</h1> </div>` } let good = { template: ` <div> <h1>我是商品</h1> 搜索:<input type="text" v-model="username"> <button @click="handlers">提交</button> </div>`, methods: { handlers() { alert(this.username) } }, data(){ return { username:'' } } } let price = { template: ` <div> <h1>我是价格</h1> </div>` } var vm = new Vue({ el: '#box', data: { who: home, }, components: { home, good, price } }) </script> </html> </html
插槽
介绍
一般情况下,编写完1个组件之后,组件的内容都是写死的,需要加数据 只能去组件中修改,扩展性很差 然后就出现了插槽这个概念,只需在组件中添加<slot></slot>,就可以在body的组件标签中添加内容
使用步骤
使用步骤: 1 在组件的html的任意位置,放个标签 <slot></slot> 2 后期在父组件使用该组件时 <lqz> 放内容 </lqz> 3 放的内容,就会被渲染到slot标签中
html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="./js/vue.js"></script> <script src="https://unpkg.com/axios/dist/axios.min.js"></script> </head> <body> <div id="app"> <lqz> <div> 我是div </div> </lqz> <hr> <lqz> <img src="https://scpic.chinaz.net/files/default/imgs/2023-05-12/23659b1edfc0a984.jpg" alt=""> </lqz> </div> </body> <script> var lqz = { template: ` <div> <h1>我是一个组件</h1> <slot></slot> <h2>我是组件内部的h2</h2> </div> ` } var vm = new Vue({ el: '#app', data: {}, components: { lqz, } }) </script> </html>
具名插槽
使用步骤:有多个soft标签时,需要使用名字来区分,不然全部都会使用
1 组件中可以留多个插槽,命名 <div> <h1>我是一个组件</h1> <slot name="middle"></slot> <h2>我是组件内部的h2</h2> <slot name="footer"></slot> </div> 2 在父组件中使用时,指定某个标签渲染到某个插槽上 <lqz> <div slot="footer"> 我是div </div> <img src="https://scpic.chinaz.net/files/default/imgs/2023-05-12/23659b1edfc0a984.jpg" alt="" slot="middle"> </lqz>
html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="./js/vue.js"></script> <script src="https://unpkg.com/axios/dist/axios.min.js"></script> </head> <body> <div id="app"> <lqz> <div slot="footer"> 我是div </div> <img src="https://scpic.chinaz.net/files/default/imgs/2023-05-12/23659b1edfc0a984.jpg" alt="" slot="middle"> </lqz> <hr> </div> </body> <script> var lqz = { template: ` <div> <h1>我是一个组件</h1> <slot name="middle"></slot> <h2>我是组件内部的h2</h2> <slot name="footer"></slot> </div> ` } var vm = new Vue({ el: '#app', data: {}, components: { lqz, } }) </script> </html>
vue-cli创建项目
单页面应用:spa(single-page application)
以后vue项目就只有一个 xx.html 页面 定义很多组件,不可能都写在 xx.html中把
单文件组件(一个组件一个文件)
https://v2.cn.vuejs.org/v2/guide/single-file-components.html#ad
一个组件中有的东西
1 html内容:以后html都放在 template标签中 2 css内容 :以后都放在 style 标签中 3 js内容: 以后都放在 script标签中
使用vue-cli 创建vue项目,才能使用 单文件组件
vue脚手架:创建出vue的项目,里面带了很多基础代码 类似于django-admim命令,可以创建出django项目
vue-cli脚手架
vue2中使用创建vue项目的软件必须用vue-cli vue3中可以使用vue-cli,也可也使用vite创建,vite号称新一代的构建工具
使用vue-cli创建vue项目 步骤
1 vue-cli是个软件,运行在nodejs环境中,安装nodejs 下载地址:https://nodejs.p2hp.com/download/ 类似于python解释器,一路下一步安装---》选择安装位置---》添加到环境变量(以后再任意位置执行node或npm都会找到) 查看node版本 node -v 安装完,释放两个可执行文件 node 等同于 python npm 等同于 pip 2 npm 安装第三方模块,速度很慢,淘宝做了个cnpm,以后咱们可以使用cnpm替代npm,会去淘宝镜像站下载,速度快 npm install -g cnpm --registry=https://registry.npm.taobao.org
3 在node环境中装vue-cli (类似于装django)
npm install -g @vue/cli
4 装完脚手架,会多出一个命令 vue 用来创建vue项目 等同于djagno-admin命令
5 使用脚手架,创建vue项目
vue create 项目名
vue-cli创建项目
vue-cli 命令行创建项目
1 vue create 项目名 2 选择入下图 3 选择Babel,Router,vuex Babel:语法转换 Router:页面跳转 路由效果 vuex:状态管理器,存储数据的 4 选vue版本 5选package.json 6之前的设置,保存与不保存都可以 等待即可
使用vue-cli-ui创建:步骤和上面一样
vue ui 启动出一个服务,直接在浏览器中点点击就可以创建
vue项目目录结构
pycharm中运行vue项目
1.按照以前pycharm的方式打开文件vue项目 2.正常使用pycharm编辑vue项目
运行vue项目
方式一:命令运行
npm run serve
方式二:使用pycharm运行
1.在绿色箭头傍边打开Edit Configurations... 2.点击+号找npm 3.在npm中找到scripts,选择server 4.点击应用,再点击ok即可
vue项目的目录结构
node_obj | 项目名 |
node_modules | 文件夹,放该项目所有的依赖,很小很多,以后把项目传给别人,这个要删除,别人拿到执行cnpm install 安装之执行 |
public | 文件夹,里面两个文件 |
favicon.ico | 小图表,浏览器上显示,可以替换 |
index.htm | spa(single-page application),这个html是整个项目的一个html 你不要动 |
src | 以后写代码,就放在这个文件夹里面 |
assets | 文件夹,放一些静态资源,图片,js,css |
components | 以后小组件写在里面 xx.vue |
HelloWorld.vue | 提供一个默认组件 |
router | 装了vueRouter就会有这个文件夹,如果不装就没有,现在不用关注 |
index.js | router文件里面的 |
store | 装了vuex就会有,不装就没有 |
index.js | store文件里面的 |
views | 文件夹,里面放了所有页面组件 |
AboutView.vue | 首页组件组件 |
HomeView.vue | 关于组件 |
App.vue | 根组件 |
main.js | 项目启动的入口文件,核心 |
.gitignore | git相关,后面学了就会了 |
README.md | 项目介绍 |
package.json | 重要,存放依赖 |
vue.config.js | vue项目的配置文件 |
package-lock.json | 锁定文件 |
babel.config.js | babel的配置,不用管 |
jsconfig.json |
vue项目编写规范
修改项目
App.vue
<template> <div id="app"> <router-view></router-view> </div> </template>
HomeView.vue
<template> <div class="home"> </div> </template> <script> export default { name: 'HomeView', } </script>
AboutView.vue
<template> <div class="about"> <h1>This is an about page</h1> </div> </template>
以后写vue项目,只需要在固定位置写固定代码即可
1 只需要创建页面组件 IndexView.vue 2 里面有三部分 # 2.1 template 必须只能有一个标签,以后所有的html都写在这里 <template> <div class="home"> <h1>我是首页</h1> <button @click="handleClick">点我看美女</button> </div> </template> #2.2 script 标签写js代码 <script> export default { name: 'HomeView', data(){return { }}, methods: { handleClick() { alert('美女') } } } </script> # 2.3 所有的样式,写在<style> <style> h1{ font-size: 80px; } </style>
es6导入导出语法
导出语法
1 项目中:创建包,创建要给文件夹 lqz 2 在包下创建 package.js 3 在文件中写js代码 var name = 'lqz' function add(a, b) { return a + b } 4 默认导出 对象 export default { add:add, name:name } 5 命名导出 导出了两个变量 export const name = '彭于晏' export const add = (a, b) => { return a * b }
导入语法
默认导出的导入 1 在任意的js中 import 起个名字 from './lqz/package' 2 使用导入的包 起个名字.导出的字段 命名导出的导入 1 在任意的js中 import {name,add} from './lqz/package' 2 直接用即可
标签:vue,cli,项目,day05,js,template,组件 From: https://www.cnblogs.com/shanghaipudong/p/17717746.html