Vue插件

2023-11-18

目录

vue项目目录结构

es6导入导出语法

Vue项目开发规范单页面组件写法

vue项目集成axios,vue项目前后端打通

前后端交互之登录功能

props配置项

父组件通过自定义属性与子组件通信

混入

插件

scoped样式

localStorage,sessionStorage 和 cookie

Vue使用elementui


vue项目目录结构

项目名
├── node_modules -- 项目的依赖
├── public -- 文件夹
├    ├── favicon.ico -- 网站顶部小图标
├    └── index.html -- 单页面开发,项目唯一页面
├── src -- 文件夹,主要代码都在里面
├    ├── assets -- img,js,css,都可以放在这里
├    ├── components -- 小组件,放在页面组件中的
├    ├── store -- 安装了vuex就会生成
├    ├── router -- 安装了vue-router就会生成,配置路由
├    ├── views -- 页面组件存放在这
├    ├── App.vue -- 根组件,靠它和唯一的页面连接的
├    └── main.js -- 整个项目的入口 
├── .gitignore -- git版本管理
├── babel.config.js -- babel的配置,不用管
├── jsconfig.json
├── package.json -- 项目的配置,和依赖的模块都在这
├── package-lock.json
├── README.md -- 项目的介绍
└── vue.config.js -- vue的配置信息
 

项目传给别人,node_modules这个文件夹要删掉,别人通过npm install 生成,装好该项目的依赖。

es6导入导出语法

在一个js文件中想要使用另一个js文件中的变量、函数等,就要用到导入导出语法。

导出

每个模块中,只允许使用唯一的一次export default,否则会报错。

export default 对象

导入

js后缀不用写,如果文件夹内有一个index.js,只导入文件夹,就相当于导入了文件夹下的index.js。

// 全部导入
import 起个名字  from 'js文件名'
// 单独导入
import {变量}  from 'js文件名'

举例:

a.js:

const name = 'yietong'
const age = 22
export default {
    name:name
}

b.js:

import aa from './a'
console.log(aa.name)  // 正常取出
console.log(aa.age)  // 没有值,因为没导出

Vue项目开发规范单页面组件写法

vue项目中的每一个vue后缀的文件都是一个组件。

一个vue组件包含以下内容:

  • template:html内容
  • script:js内容
  • style:css样式

比如Vue项目views文件夹下的HomeVie.vue文件:

<template>
  <div class="home">
    <h1>{{ aa }}</h1>
    <img alt="Vue logo" src="../assets/logo.png">
    <HelloWorld msg="Welcome to Your Vue.js App"/>
  </div>
</template>

<script>
// @就相当于/src,这里导入HelloWorld.vue组件
import HelloWorld from '@/components/HelloWorld.vue'

export default {
  name: 'HomeView',
  // 组件属性写在这
  data() {
    return {
      aa: 'abcd'
    }
  },
  components: {
    HelloWorld
  }
}
</script>
<!--scoped表示这个css样式只作用于当前组件-->
<style scoped>
img {
  width: 100px;
}
</style>

main.js 是整个入口

1. 把App.vue跟组件导入了

2. 使用new Vue({render:h => h(App)}).$mount('#app')把App.vue组件中的数据和模板插入到index.html的id为app 的div中

3, 在每个组件的export default {}写之前学过的所有js的对象

4,在每个组件的template写模板,插值语法,指令

5,在每个组件的style写样式。

vue项目集成axios,vue项目前后端打通

安装axios

npm install axios --S

main.jsz导入使用

import axios from 'axios'

发送请求,获取数据

 axios.get('http://127.0.0.1:8000/books/').then(res => {
      console.log(res.data)
      this.bookList=res.data
    })

解决django项目跨域问题的一种方式

1,安装模块

pip3 install django-cors-headers

2, app中注册

 INSTALLED_APPS = (
            ...
            'corsheaders',
            ...
        )

3,中间件注册

 MIDDLEWARE = [
        ...
        'corsheaders.middleware.CorsMiddleware',
        ...
        ]

4, 复制下边的内容到配置文件中

 CORS_ORIGIN_ALLOW_ALL = True
        CORS_ALLOW_METHODS = (
            'DELETE',
            'GET',
            'OPTIONS',
            'PATCH',
            'POST',
            'PUT',
            'VIEW',
        )
        CORS_ALLOW_HEADERS = (
            'XMLHttpRequest',
            'X_FILENAME',
            'accept-encoding',
            'authorization',
            'content-type',
            'dnt',
            'origin',
            'user-agent',
            'x-csrftoken',
            'x-requested-with',
            'Pragma',
        )

前后端交互之登录功能

<template>
  <div id="app">
    <p>username:<input type="text" v-model="username"></p>
    <p>password:<input type="password" v-model="password"></p>
    <button @click="submitClick">登录</button>
    <span>{{ error }}</span>
  </div>
</template>

<script>
import axios from 'axios'

export default {
  name: 'App',
  data() {
    return {
      username: '',
      password: '',
      error: ''
    }
  },
  methods: {
    submitClick() {
      axios.post('http://127.0.0.1:8000/user/login/', {username: this.username, password: this.password}).then(item => {
        if (item.data.code === 100) {
          alert(item.data.msg)
        } else {
          this.error = item.data.msg
        }
      })
    }
  }
}
</script>

django后端

class Login(ViewSet):
    @action(methods=['post'], detail=False, url_path='login')
    def login(self, request):
        username = request.data.get('username')
        password = request.data.get('password')
        user = authenticate(username=username, password=password)
        if user is not None:
            login(request, user)
            return Response({'code': 100, 'msg': '登陆成功'})
        return Response({'code': 101, 'msg': '用户名或密码错误'})

props配置项

接受父传子自定义的属性

数组写法

对象写法

数组套对象写法

父组件通过自定义属性与子组件通信

子组件components/Child.vue

<template>
  <div>
    <button>后退</button>
    {{ title }}=>{{ msg }}=>{{ is_show1 }}
    <button>前进</button>
  </div>
</template>

<script>
export default {
  name: "Child",
  data() {
    return {
      title: 'Child页'
    }
  },
  // 方式一:
  // props: ['msg', 'is_show1']

  // 方式二:
  // props: {
  //   msg: String,
  //   is_show1: Boolean
  // },

  // 方式三:
  props: {
    msg: {
      type: String,  //类型
      required: true,  //必不必须
      default: '不传的默认值'  //默认值
    },
    is_show1: {
      type: Boolean,
      required: true,
      default: false
    }

  },
  created() {
    console.log(typeof this.msg, typeof this.is_show1)
  }
}
</script>

<style scoped>

</style>

父组件App.vue

<template>
  <div id="app">
        <child msg="父组件向子组件通信" :is_show1="true"></child>
  </div>
</template>

<script>
import Child from "@/components/Child";

export default {
  name: 'App',
  data() {
    return {

    }
  },
  components:{Child}
}
</script>

 

写法总结

// 普通使用

props:['msg']

// 属性验证

props:{msg:String},

// 指定类型:必填和默认值

props:{

msg:{

type:String,  //类型

required:true,  //必要性

default:'yietong'}  //默认值

},

混入

mixin混入 可以把多个组件共用的配置提取成一个混入对象

把多个组件中公用的东西,抽取出来,以后跨域全局或者局部使用

步骤

1. 写一个mixin/index.js


export const mixin1 = {
methods: {
    printMsg() {
        console.log('混入')
    }
},
mounted() {
    console.log("你好啊");
},
}

export const mixin2 = {
    data() {
        return {
            x: 100,
            y: 200
        }
    }

}

2,局部导入:在组件中

 <template>
  <div id="app">
    <button @click="printMsg">点我打印</button>
    {{ x }}====={{ y }}
  </div>
</template>

<script>
import {mixin2, mixin1} from '@/mixin'

export default {
  name: 'App',
  mixins: [mixin2, mixin1]

}
</script>

3,全局使用,在main.js中,以后所有组件都可以使用

import Vue from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
import {mixin1,mixin2} from "@/mixin";

Vue.config.productionTip = false
Vue.mixin(mixin1)
Vue.mixin(mixin2)

new Vue({
  router,
  store,
  render: h => h(App)
}).$mount('#app')

 

插件

插件的目的时为了增强Vue

本质时包含install方法的一个对象, install的第一个参数是Vue,第二个以后的参数是插件使用者传入的数据

步骤

写一个plugins/index.js

import Vue from "vue";
import axios from 'axios'
import {mixin1, mixin2} from "@/mixin";

export default {
    install(vm) {
        console.log(vm)
        Vue.prototype.$name = 'yeitong'
        Vue.prototype.$axios = axios
        // 使用插件 全局加入混入
        Vue.mixin(mixin1)
        Vue.mixin(mixin2)

    }
}

2. 在main.js中使用插件

   import plugins from '@/plugins'
	Vue.use(plugins)  // 本子,使用use,会自动触发插件对象中得install

 3 以后再组件中可以直接用插件中写的东西

 

 

scoped样式


在styple上写 <style scoped>  </style>,以后只针对于当前组件生效

localStorage,sessionStorage 和 cookie

window 浏览器对象有的东西

如果想在浏览器中存储数据

永久存储: localStorage  不等了加购物车/搜索过的内容

临时存储: sessionStorage  关闭页面数据就消失

过期消失: cookie 设置一个过期时间,到时候过期

安装vue-cookie

npm install vue-cookie --save

main.js中使用

import Vue from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
import VueCookies from 'vue-cookie'



Vue.config.productionTip = false
Vue.use(VueCookies)

new Vue({
  router,
  store,
  render: h => h(App)
}).$mount('#app')

在vue组件中可以通过this.$cookies进行操作。

API

设置cookie

this.$cookies.set(keyName,value)

获取cookie

this.$cookies.get(keyName)// return value   

删除cookie

this.$cookies.delete(keyName)

检查某个 cookie name是否存在

this.$cookies.isKey(keyName)   // return false or true

获取所有 cookie name,以数组形式返回

this.$cookies.keys()  // return a array

在mainjs中需要这样写,例如:

VueCookies.get(keyName)

App.vue


<template>
  <div id="app">
    <h1>localStorage</h1>
    <button @click="setLocalStorage">添加</button>
    <button @click="getLocalStorage">查看</button>
    <button @click="removeLocalStorage">删除</button>
    <h1>sessionStorage</h1>
    <button @click="setSessionStorage">添加</button>
    <button @click="getSessionStorage">查看</button>
    <button @click="removeSessionStorage">删除</button>
    <h1>cookie</h1>
    <button @click="setCookie">添加</button>
    <button @click="getCookie">查看</button>
    <button @click="removeCookie">删除</button>
  </div>
</template>

<script>


export default {
  name: 'App',
  methods: {
    setLocalStorage() {
      let obj = {name: 'yietong', age: 22}
      localStorage.setItem('data', JSON.stringify(obj))
    },
    getLocalStorage() {
      console.log(localStorage.getItem('data'))
    },
    removeLocalStorage() {
      // 清空
      // localStorage.clear()
      localStorage.removeItem('data')
    },
    setSessionStorage() {
      let obj = {name: 'yietong', age: 22}
      sessionStorage.setItem('data', JSON.stringify(obj))
    },
    getSessionStorage() {
      console.log(sessionStorage.getItem('data'))
    },
    removeSessionStorage() {
      // 清空
      // sessionStorage.clear()
      sessionStorage.removeItem('data')
    },
    setCookie() {
      console.log(this)
      let obj = {name:'yietong',age:22}
      this.$cookie.set('data', JSON.stringify(obj),1000)
    },
    getCookie() {
      console.log(this.$cookie.get('data'))
    },
    removeCookie() {
      this.$cookie.delete('data')
    }
  }
}
</script>

 

 

Vue使用elementui

elementui可以快速构建出好看的页面。

官方地址:组件 | Element

第一步:安装elementui,在Vue项目下,输入命令:

npm i element-ui -S

-S表示安装到当前项目下,并添加到依赖(package.json)中。

第二步:在main.js中添加配置:

import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
Vue.use(ElementUI);

第三步:去官网,复制粘贴合适的组件到<template>标签下,在调整一下即可。地址:组件 | Element

第三方样式库

比较常见的有 elementui, iview, 移动端的ui vant

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Vue插件 的相关文章

  • 使用 获取用于 javascript 的 RSA 密钥?

    我的 Web 项目需要一个 RSA 密钥对 虽然有一些库 但我认为依靠浏览器 为了安全性和速度 为我生成密钥是个好主意 是否可以使用注册机或其他浏览器 API 来执行此操作 我不知道如何从注册机获取密钥 它们似乎是在提交时生成的 但我不想将
  • 在 Javascript 中本地化字符串

    我目前正在使用 resx文件来管理我的 NET 服务器端资源 我正在处理的应用程序还允许开发人员将 JavaScript 插入各种事件处理程序中以进行客户端验证等 对我来说本地化 JavaScript 消息和字符串的最佳方法是什么 理想情况
  • 有没有办法监控页面上运行的 JavaScript 函数?

    有没有办法查看页面上正在执行哪些功能 如果我在页面上加载外部脚本 是否可以动态更改函数的功能或阻止其运行 HTML5 http www w3 org TR html5 scripting 1 html establish script bl
  • Google Charts(AreaChart)如何检测缩放变化

    我正在画一个面积图 在覆盖层上有一些标记 我正在使用explorer选项 仅限水平 以便用户放大和缩小 问题是我找不到一种方法来通知缩放更改 以便有机会更新制造商位置 有一个图表范围变化事件 但它不是由 AreaChart 触发的 我尝试检
  • jQuery 验证日期范围问题

    我的代码中有很多地方有成对的相关开始和结束日期字段 范围 我需要验证开始日期早于结束日期 我正在使用 jQuery 验证插件 这是我的代码 http jsfiddle net jinglesthula dESz2 http jsfiddle
  • 卸载/销毁 Angular 延迟加载组件

    我的设置与此处找到的帖子类似http ify io lazy loading in angularjs http ify io lazy loading in angularjs 处理 Angular 中我的应用程序的各种组件的延迟加载 我
  • 在 JavaScript 中定位提示弹出窗口

    我有一个如下所示的 JavaScript 提示 我想将提示放在屏幕中心 如何使用 javascript 做到这一点 function showUpdate var x var name prompt Please enter your na
  • AngularJS 输入字段未从控制器内的 setTimeout 更新

    我正在使用 AngularJS 支持的页面 并且我需要在只读输入文本字段内显示正在运行的时钟 与data ng model 为了模拟运行的时钟 我使用了 JavaScript 调度程序setTimeout每 1000 毫秒调用一个函数 该函
  • 获得一次性绑定以适用于 ng-if

    这个问题已经被之前问过 https stackoverflow com questions 23969926 angular lazy one time binding for expressions 但我无法让该解决方案发挥作用 所以我想
  • 删除 Laravel Mix 中的临时文件

    我想在 laravel mix 构建期间或之后删除临时构建文件 这是我目前拥有的一些代码 但是del不工作 const mix require laravel mix const del require del compile sass i
  • 无法在渲染器进程中使用 Node.js API

    无法在 Electron 中使用任何与 Electron 或节点相关的操作 未定义获取错误过程 我检查了他们指导添加节点支持的各个地方 但这已经完成了 所以卡在这里 我的主要应用程序代码是 const electron require el
  • 仅在首页加载时使用 cookie 加载 colorbox

    我尝试了来自网络的参考代码 仅在页面加载时加载特定元素一次 这是示例代码
  • 如何生成 JavaScript 堆栈跟踪? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 关于如何以跨浏览器的方式在 javascript 中生成堆栈跟踪有什么建议吗 较新的浏览器 Chrome 和 Firefox 公开了一个允
  • 显示班级图片 10 秒

    我有下面给出的代码显示9 boxes 其值如下digital time 还有一个班级box002显示digits相当于随机选择的九个盒子的值 box002 can be dragged to digital time starting wi
  • 如何修复 getImageData() 错误画布已被跨源数据污染?

    我的代码在本地主机上运行得很好 但在网站上却不起作用 我从控制台收到此错误 对于这一行 getImageData x y 1 1 data Uncaught SecurityError Failed to execute getImageD
  • 父指令属性更改时子指令不会更新

    这是对这两个问题的后续 在父指令和子指令之间传递参数 https stackoverflow com questions 42814530 pass argument between parent and child directives
  • JavaScript 中最长的通用前缀

    我正在尝试解决 Leet Code 挑战14 最长公共前缀 https leetcode com problems longest common prefix 编写一个函数来查找字符串数组中最长的公共前缀字符串 如果没有公共前缀 则返回空字
  • 数字和小数的输入掩码

    在测试我的程序后 我发现了以下错误 我在 sqlserver 中的表包含 价格数字 6 2 我的程序的用户输入价格 555 00 就很好了 但是当他输入 555555 时 这是错误的 所以我需要指定掩码 其中尾数是可选的 0 到 999 小
  • 在 JSP 或 Javascript 中清除浏览器缓存中的图像

    我正在为一所大学开发JSP Web 应用程序 用户页面中显示人员图片 用户注销后如何从网络浏览器缓存中清除这张图片 使用 JSP 或 JavaScript 那是不可能的 最好的选择是完全禁用相关资源的缓存 创建一个filter https
  • 如何从配置加载套接字 io 事件监听器? [复制]

    这个问题在这里已经有答案了 我有使用套接字io 的nodejs 应用程序 我将存储在 config routes js 中的所有事件侦听器 module exports routes auth login controller auth a

随机推荐

  • 【华为OD统一考试B卷

    在线OJ 已购买本专栏用户 请私信博主开通账号 在线刷题 运行出现 Runtime Error 0Aborted 请忽略 华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一
  • 根据IDEA完成的简单学生成绩管理系统

    根据IDEA完成的简单学生成绩管理系统 要求 输入选项 当选择录入成绩的时候来输入各个学生的成绩 直到输入 1 结束输入成绩 最后输出输入了几名学生的成绩 然后循环到主界面 输入其他的选项 来查询学生成绩的平均分 最高分 最低分 然后退出系
  • mysqlbinlog delete恢复成insert

    不小心把数据删掉了 首先要拿到binlog文件 执行以下命令行 usr local mysql bin mysqlbinlog base64 output decode rows start datetime 2023 05 19 09 0
  • 树莓派传感器篇

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 玩树莓派其中方向之一 控制各种传感器 先搞明白各种传感器的参数及使用方式 树莓派GPIO各个引脚的用处及含义 这里要着重说明一点的是 千万不要把3 3V以上的电压链接到树莓
  • OpenSSL中文手册之PEM库详解

    版权声明 本文根据DragonKing牛 E Mail wzhah 263 NET发布在https openssl 126 com的系列文章整理修改而成 这个网站已经不能访问了 我自己所做的工作主要是针对新的1 0 2版本进行验证 修改错别
  • 十八.欧几里得算法

    欧几里得算法 unsigned int Gcd unsigned int M unsigned int N unsigned int Rem while N gt 0 Rem M N M N N Rem return M 此算法用来计算最大
  • Vue实现动画的几种方式

    vue内置组件transition 元素出现和消失都呈现动画
  • For循环结构的使用

    一 四个要素 初始化条件 循环条件 gt 是boolean类型 循环体 迭代条件 二 for循环的结构 for 执行过程 1 2 3 4 2 3 4 2 遍历100以内的偶数 输出所有偶数和 int sum 0 记录所有偶数的和 int c
  • FTP服务器版本信息可被获取(CVE-1999-0614)(建议修改源代码或者配置文件改变缺省banner信息。)

    漏洞扫描报告 1 测试查看 默认端口21 telnet localhost 21 下图所示即为漏洞信息描述的 可获取版本号 2 修改 vsftpd conf 配置文件 etc vsftpd vsftpd conf 找到 ftpd banne
  • linux 怎样停定时任务,linux停用cron定时执行任务的方法

    linux下用cron定时执行任务的方法 名称 crontab 使用权限 所有使用者 使用方式 crontab file u user 用指定的文件替代目前的crontab crontab u user 用标准输入替代目前的crontab
  • C++泛型编程

    C 泛型编程 1 泛型编程 1 1 模板 1 2 函数模板 1 2 1 语法 1 2 2 使用函数模板方式 1 2 3 普通函数和函数模板的区别 1 2 4 普通函数与函数模板的调用规则 1 2 5 模板的局限性 1 3 类模板 1 3 1
  • findBug 错误修改指南

    FindBugs错误修改指南 1 EC UNRELATED TYPES Bug Call to equals comparing different types Pattern id EC UNRELATED TYPES type EC c
  • spark_hadoop集群搭建自动化脚本

    bin bash 脚本使用说明 1 使用脚本前需要弄好服务器的基础环境 2 在hadoop的每个节点需要手动创建如下目录 data hdfs tmp 3 修改下面的配置参数 4 脚本执行完备后需要收到格式化namenode
  • APP移动端自动化测试(八)总览

    官网地址 https github com appium appium blob master docs en writing running appium server args md 项目中你是怎么结合自动化的 apk for andr
  • JavaScript 获取时间日期方法

    Date对象包含日期和时间的相关信息 Date对象没有任何属性 它只具有很多用于设置和获取日期时间的方法 方法 说明 getDate 返回Date对象中月份的天数 gateDay 返回Date对象中的星期几 getHours 返回Date对
  • 机器学习算法案例:泰坦尼克号乘客生存预测

    学习目标 通过案例进一步掌握决策树算法api的具体使用 1 案例背景 泰坦尼克号沉没是历史上最臭名昭着的沉船之一 1912年4月15日 在她的处女航中 泰坦尼克号在与冰山相撞后沉没 在2224名乘客和机组人员中造成1502人死亡 这场耸人听
  • ubuntu编译安装mmcv 1.6.2和mmsegmentation 0.28.0

    环境 ubuntu16 04 cuda10 1 python 3 8 pytorch 1 6 0 cuda10 1 对应的torch版本 lt 1 8 但是1 8和1 7都试了 mmcv没有编译成功 只有1 6成功了 1 编译MMCV 1
  • 行为型模式-策略模式

    package per mjn pattern strategy 抽象策略类 public interface Strategy void show package per mjn pattern strategy 具体策略类 用来封装算法
  • warning: function declared implicitly错误原因

    http blog sina com cn s blog 629f56a70100irbn html line 10 warning function declared implicitly 这是由于没有声明函数原型造成的 在a c中 vo
  • Vue插件

    目录 vue项目目录结构 es6导入导出语法 Vue项目开发规范单页面组件写法 vue项目集成axios vue项目前后端打通 前后端交互之登录功能 props配置项 父组件通过自定义属性与子组件通信 混入 插件 scoped样式 loca