首页 > 其他分享 >vue学习笔记

vue学习笔记

时间:2022-10-31 21:33:55浏览次数:52  
标签:插件 vue name 笔记 js 学习 axios 组件

今日内容概要

  • vue项目目录介绍
  • es6的导入导出语法
  • vue项目开发规范
  • vue项目集成axio
  • vue项目前后端打通
  • props配置项
  • 混入
  • 插件
  • scoped样式
  • localStorage和sessionStorage
  • 集成elementui

今日内容详细

vue项目目录介绍

myfirstvue                    #项目名字
    node_modules         # 文件夹,内部有很多当前项目依赖的模块,可以删除,npm install
    public                       #文件夹
        favicon.ico            # 网站小图标
        index.html            # spa:单页面应用  
    src                            #以后咱们写代码,都在这下面
        assets                   # 静态资源,js,css,图片  类似于static文件夹
            logo.png          # 静态资源的图片
        components         # 组件:小组件,用在别的大(页面组件)组件中
            HelloWorld.vue # 默认了一个hello world组件
        router                    # 装了vue-router自动生成的,如果不装就没有
            index.js              # vue-router的配置
        store                      # 装了vuex自动生成的,如果不装就没有
            index.js              # vuex的配置
        views                     # 放了一堆组件,页面组件
            AboutView.vue   # 关于 页面组件
            HomeView.vue    # 主页  页面组件
        App.vue                 # 根组件
        main.js                  # 整个项目启动入口
    .gitignore                  #git的忽略文件
    babel.config.js          #babel的配置
    jsconfig.json
    package.json             # 重要:类似于python项目的requirements.txt  当前项目所有依赖
    package-lock.json     #锁定文件:package.json中写了依赖的版本,这个文件锁定所有版本
    README.md              # 读我,项目的介绍
    vue.config.js              # vue项目的配置文件

es6的导入导出语法

如果要导入,必须先导出。

默认导出和导入

1. 写一个js,在js中定义变量,函数,最后使用 export defalut 导出
    export default {
        name: '彭于晏',
        printName () {
            console.log(this.name)
         }
     }
2. 在想使用的js中导入
    import 随便起 from './lqz/utils'

命名导出和导入

1. 写一个js ,在js中定义变量,函数,最后使用export  导出
    export const name = '刘亦菲'
    export const printName = () => {
        console.log('wjl')
    }
2. 在想使用的js中导入
    import {printName} from './lqz/utils'

补充:在包下可以建立一个名为index.js 的文件,以后导入的时候,会默认找它(对比python中的__ init__.py)

vue项目开发规范

# 以后写的组件,都是单页面组件  使用 xx.vue 以后写一个组件就是一个xx.vue,页面组件和小组件
# 以后一个组件就是一个xx.vue,内部都有三部分
    <template></template>  # html内容写在里面
    <script></script>             # 写js内容
    <style></style>                # 写css样式
# 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项目集成axio

# 第一步,安装
npm install axios -S

# 第二步:main.js 配置
# 导入
import axios from 'axios'
# 类的原型中放入变量
Vue.prototype.$axios = axios;

# 第三步:在任意组件中使用
# this.$axios   就是axios对象
this.$axios.get().then(res=>{})


如果,没有在main.js中配置,使用如下:
# 导入使用
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',
        )

vue项目前后端打通

前后端交互版登录功能

<template>
  <div id="app">
    <h1>登录功能</h1>
    <p>用户名:<input type="text" v-model="username"></p>
    <p>密码:<input type="password" v-model="password"></p>
    <button @click="handleSubmit">登录</button>{{msg}}
  </div>
</template>
<script>
import axios from 'axios'
export default {
  name: 'App',
  data() {
    return {
      bookList: [],
      username: '',
      password: '',
      msg:''
    }
  },
  methods: {
    handleSubmit() {
      axios.post('http://127.0.0.1:8000/user/', {
        username: this.username,
        password: this.password
      }).then(res => {
        console.log(res.data)
        if(res.data.code==100){
          // 登录成功 跳转到百度
          location.href='http://www.baidu.com'
        }else {
          this.msg=res.data.msg
        }
      })
    }
  },
  created() {
    axios.get('http://127.0.0.1:8000/books/').then(res => {
      this.bookList = res.data
    })
  }
}
</script>
<style>
h1 {
  background-color: aqua;
}
</style>

props配置项

利用props配置项由 父组件 向 子组件 传值操作,步骤如下:

(1)在父组件中使用子组件的标签里面通过属性绑定向子组件传值,如下代码:

<Demo name="xxx"><Demo/>

(2)子组件通过props配置项接收,如下代码:

第一种方式(只接受值):
props:["name"]

第二种方式(接收值并且限制值的类型):
props:{name:String}

第三种方式(限制类型、限制必要性、指定默认值):
props:{
    name:{
        type:String,//限制类型
        required:true,//限制必要性
        default:"老王"//指定默认值
    }}

在此提出一个注意点,props是只读的,Vue底层会监测你对props的修改,如果进行了修改,就会发出警告,若业务需求确实需要修改,那么可以考虑一下两种方式:

方式一:将props内接收的值赋值给本地data,代码如下:

props: ['demo'],
data: function () {
        return {
            counter: this.demo
        } }

方式二:若prop 以一种原始的值传入且需要进行转换,可以定义一个计算属性,代码如下:

props: ['demo'],
computed: {
  normalizedSize: function () {
    return this.demo.reverse()
  }
}

混入

# mixin(混入)可以把多个组件共用的配置提取成一个混入对象
    把多个组件中共用的东西,抽取出来,以后可以全局使用和局部使用
# 使用步骤
1 建个mixin/index.js文件
    export const hunhe = {
        data() {
        return {
          name: '彭于晏'
        }
      },
        methods: {
            handlePrintName() {
                alert(this.name)
            }
        },
    }
2 局部导入:在组件中
    import {hunhe} from "@/mixin";
        mixins:[hunhe,]
3 全局使用,在main.js 中 以后所有组件都可以用
    import {hunhe} from "@/mixin";
    Vue.mixin(hunhe)

插件

在vue这里的插件,并不是说我们去写一个第三方程序,然后通过命令行或者其他方式进行安装。
说简单点,本次所说的插件就是一个json对象;一般我们都会创建一个js(如plugins.js)文件,然后在里面编写插件的内容,比如:

# 功能:用于增强Vue
本质:包含install方法的一个对象,install的第一个参数是Vue,第二个以后的参数是插件使用者传递的数据
# 使用步骤
创建一个plugins/index.js文件
import Vue from "vue";
import axios from "axios";
import {hunhe} from '@/mixin'
export default {
    install(miVue) {
        console.log(miVue)
        1 vue 实例上放个变量
        Vue.prototype.$name = 'lqz'  # 类比python,在类上放了一个属性,所有对象都能取到
        Vue.prototype.$ajax = axios

        2 使用插件,加入混入
        全局使用混入
        Vue.mixin(hunhe)


        3 定义全局组件(全局过滤器)
        Vue.filter('mySlice',function(value){
            return value.slice(0,4)
        })

        4 定义自定义指令  v-lqz
        Vue.directive("fbind", {
            //指令与元素成功绑定时(一上来)
            bind(element, binding) {
                element.value = binding.value;
            },
            //指令所在元素被插入页面时
            inserted(element, binding) {
                element.focus();
            },
            //指令所在的模板被重新解析时
            update(element, binding) {
                element.value = binding.value;
            },
        });
    }
}

vue进行规定,install函数是必须得有的。而函数体则是插件的内容。
既然插件已经有了,现在就要应用插件,一般在main.js中进行应用,如下:

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

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

scoped样式

# 在styple上写 <style scoped>  </style>,以后只针对于当前组件生效
作用:让样式在局部生效,防止冲突

写法:<style scoped>  </style>

总结:可以防止在两个组件中使用了相同名字的style样式而导致后面引入的样式覆盖了前面的样式的冲突,但在App.vue文件中最好不要使用,因为App.vue通常存放所有的style样式,大多数情况都是用来在全局使用的。此外可以使用npm view webpack versions命令查看webpack的历史版本,使用npm i less-loader@版本号配置less-loader,当ledd-loader版本高于webpack版本不少时安装可能会报错。

localStorage和sessionStorage

# window 浏览器对象有的东西
# 如果想在浏览器中存储数据,
localStorage:永久存储(不登录加购物车,没登录搜索过的商品)
sessionStorage:关闭页面数据就没了(临时存储)
cookie:设定一个时间,到时候就过期

# 补充:序列化和反序列化
对象转json字符串:
    JSON.stringify(person)
json字符串转对象:
    JSON.parse()

代码演示:

<template>
  <div id="app">
    <h1>localStorage操作</h1>
    <button @click="saveStorage">点我向localStorage放数据</button>
    <button @click="getStorage">点我获取localStorage数据</button>
    <button @click="removeStorage">点我删除localStorage放数据</button>

    <h1>sessionStorage操作</h1>
    <button @click="saveSessionStorage">点我向sessionStorage操作放数据</button>
    <button @click="getSessionStorage">点我获取sessionStorage操作数据</button>
    <button @click="removeSessionStorage">点我删除sessionStorage操作放数据</button>

    <h1>cookie操作</h1>
    <button @click="saveCookie">点我向cookie放数据</button>
    <button @click="getCookie">点我获取cookie数据</button>
    <button @click="removeCookie">点我删除cookie放数据</button>
  </div>
</template>
<script>
import cookies from 'vue-cookies'
export default {
  name: 'App',
  data() {
    return {}
  },
  methods: {

    saveStorage() {
      let person = {
        name: '彭于晏',
        age: 38
      }
      localStorage.setItem('userinfo', JSON.stringify(person))
    },
    getStorage() {
      let userinfo = localStorage.getItem('userinfo')
      console.log(userinfo)
      console.log(typeof userinfo)
    },
    removeStorage() {
      // localStorage.clear()
      localStorage.removeItem('userinfo')
    },

    saveSessionStorage() {
      let person = {
        name: '彭于晏',
        age: 38
      }
      sessionStorage.setItem('userinfo', JSON.stringify(person))
    },
    getSessionStorage() {
      let userinfo = sessionStorage.getItem('userinfo')
      console.log(userinfo)
      console.log(typeof userinfo)
    },
    removeSessionStorage() {
      // localStorage.clear()
      sessionStorage.removeItem('userinfo')
    },

    saveCookie() {
      cookies.set('name','lqz','7d')  // 按秒计
    },
    getCookie() {
      console.log(cookies.get('name'))
    },
    removeCookie() {
      cookies.remove('name')
    }
  }
}
</script>
<style>
</style>

集成elementui

# 第三方 样式库  常见的
    饿了么团队:elementui
    iview
    移动端的ui:vant
# 使用步骤
    1. 安装
    npm install element-ui -S
    2. 在main.js中引入
    import ElementUI from 'element-ui';
    import 'element-ui/lib/theme-chalk/index.css';
    Vue.use(ElementUI)

标签:插件,vue,name,笔记,js,学习,axios,组件
From: https://www.cnblogs.com/wwjjll/p/16845888.html

相关文章

  • HCIA学习笔记三十七:OSPF多区域配置
    一、OSPF多区域二、OSPF多区域配置实验>>>沿用上一节的实验拓扑及配置,让AR1和AR2的连接放在Area0里面,AR2和AR3的连接放在Area1里面。这样,AR2就成了区域边界路由器ABR......
  • 监听器学习
    监听器1.什么是监听器web监听器是Servlet中一种特殊的类,能帮助开发者监听Web中的特定事件,比如ServletContext,HttpSession,ServletRequest的创建和销毁;变量的创建、销毁......
  • 学习笔记——美多商城——1 美多商城项目准备
    2022-10-23步骤:一、创建工程仓库(1)在“码云”上创建一个仓库,在本地盘符中创建一个文件夹,右击,使用git,将远程仓库的内容克隆到本地仓库中,点击“GitBashHere”。将刚刚创......
  • 点分治学习笔记
    点分治点分治用于求解树上路径有关的问题。其具体思想,对于当前处理的这一个分治区域,我们计算所有区域内跨过分治中心这一个点的所有路径的贡献,然后将分治中心及与其相邻......
  • 线性基学习笔记
    线性基概念:线性基就是一组基(啊说通俗一点点就是一组数字),这一组基相互进行异或操作能够表示出给定原集合的所有异或和,我们一般选择最简单的一组。可用于每一个亦或和的排......
  • SpringMVC笔记
    目录一、SpringMVC简介1、什么是MVC2、什么是SpringMVC3、SpringMVC的特点二、HelloWorld1、开发环境2、创建maven工程a>添加web模块b>打包方式:warc>引入依赖3、配置web.xm......
  • 程序员修炼之道第四章读书笔记与感悟
               程序员修炼之道第四章读书笔记与感悟程和其他工程技术一样,是一项充满细节的工作,追踪这些细节需要专注。且要能持续地作出大大小小的改进......
  • 《程序员修炼之道:从小工到专家》阅读笔记4
    如果你自己找不到答案,就去找出能找到答案的人。不要把问题搁在那里。与他人交谈可以帮助你建立人际网络,而因为在这个过程中找到了其他不相关问题的解决方案,你也许还会让自......
  • 2022.10.31python学习第二天
    python集合(数组)1.列表:是一种有序和可更改的集合,允许重复的成员   列表用 []来编号  可通过索引号来访问列表项  ......
  • 程序员修炼之道:从小工到专家读书笔记(复制)
    其实对于我们步入大学以后才接触到编程的人来说,我们没有基础,更没有稳固的知识储备,这更是考验我们能力的时期,我们在大学的学习过后可能会成为哪种高不成低不就的中手,需要高......