首页 > 其他分享 >vue-05

vue-05

时间:2022-10-31 22:24:18浏览次数:45  
标签:vue name 05 js --- localStorage 组件

目录

vue项目目录介绍

1.myfirstvue---项目名
2.node_modules---项目依赖的模块
3.public
	favicon.ico---网站小图标
	index.html---spa:单页面应用
4.src---操作页面
	assets---静态资源css js html
    	logo.png---静态资源页面图标
	components---小组件 用在页面组件中
    	HelloWorld.vue---组件
	router---装了vue-router自动生成
    	index.js---vue-router的配置
	store---装了vuex自动生成
    	index.js---vuex的配置
	views---组件
    	AboutView.vue---关于 页面组件 
		HomeView.vue---主页 页面组件
	App.vue---根组件
	main.js---项目启动入口
5 .gitignore---git忽略文件
6. babel.config.js---babel的配置
7. jsconfig.json
8. package.json---当前项目的所有依赖类似于python--requirements.txt
9. package-lock.json---锁定文件 文件中写了依赖的版本 这个文件锁定所有版本
10. README.md---说明 项目介绍
11. vue.config.js---vue项目的配置文件

es6的导入导出语法

1.导出:
1.1 默认导出:export defalut
1.2 命名导出:export const name = '导出'
2.导入:
2.1 使用默认导出后导入:import 名字 from '导出文件的路径(如果在index.js中只需要写到上一层 index.js相当于包中的__init__)'
2.2 使用命名导出后导入:import {名字} from '导出文件的路径'
3.代码:

  3.1 默认导出与导入:
      导出:
   export default{
    name:'lili',
    printName(){
        console.log(name)}}
		导入:
    import zq from './lyt/drdc'
	console.log(zq.name)	
  3.2 命名导出与导入:
     导出:
    var name = 'lili'
	export const printName = () => {
  	console.log(name)}
    导入:
    import {printName} from './lyt/drdc'
	console.log(printName())

vue项目开发规范

1.单页面组件:使用xx.vue--页面组件和小组件
2.单页面组件构成:
---html内容写在里面

---写js内容 ---写css样式

3.项目入口:main.js
3.1 把App.vue根组件导入了
3.2 使用new Vue({render: h => h(App)}).$mount('#app') 把App.vue组件中得数据和模板,插入到了index.html的id为app div中了
3.3 在每个组件的export default {} 写之前学过的所有js的东西
3.4 在每个组件的template,写模板,插值语法,指令
3.5 在每个组件的style,写样式

vue项目集成--axios

1.安装axios---npm install axios --S(S相当于save)
2.导入:import axios from 'axios'
3.发送请求 获取数据

  created() {
    axios('http://127.0.0.1:8000/book/').then(res=>{
      console.log(res)
      this.res=res.data
      console.log(this.res)
    })}
4.方式一:解决跨域(django项目)
  1.安装:pip3 install django-cors-headers
  2.app中注册: 
    INSTALLED_APPS = (
                ...
                'corsheaders',
                ...
            )
  3.中间件中注册:
    MIDDLEWARE = [
        ...
        'corsheaders.middleware.CorsMiddleware',
        'django.middleware.common.CommonMiddleware',
        ...
        ]
  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',
            )
5.登录案例:
5.1 django:
    class Login(ViewSet):
        @action(methods=['post', ], detail=False)
        def login(self, request):
            username = request.data.get('username')
            password = request.data.get('password')
            user = User.objects.filter(username=username, password=password).first()
            if user:
                return Response({'code': 100, 'msg': '用户登录成功'})
            return Response({'code': 101, 'msg': '用户名或密码错误'})
5.2 vue项目中
router/index.js中注册页面
	{path: '/dl',
    name: 'dl',
    // route level code-splitting
    // this generates a separate chunk (about.[hash].js) for this route
    // which is lazy-loaded when the route is visited.
    component: () => import(/* webpackChunkName: "about" */ '../views/dl.vue')
  },
 js页面中发送axios请求
    <template>
    <div id="app">
      <p>用户名:<input type="text" v-model="username"></p>
      <p>密码:<input type="password" v-model="password"></p>
      <button @click="handleClick">提交</button>{{res}}
    </div>
    </template>
    import axios from 'axios'
    <script>
    import axios from "axios";
    export default {
      // name: "dl",
      data(){
          return{
            res:'',
            username:'',
            password:''
          }
      },
      methods:{
        handleClick(){
           axios.post('http://127.0.0.1:8000/user/login/',{
             username:this.username,
             password:this.password
               }
           ).then(res=>{
          console.log(res)
          this.res=res.data
          console.log(this.res)
        })
        }
      },
    }
    </script>

props配置项

1.父传子自定义的属性:
1.1 数组写法
1.2 对象写法
1.3 对象套对象写法
2.步骤:

  2.1 普通使用(数组写法)
  	props: ['msg'],
  2.2 属性验证(对象写法)
  	props: {msg: String},
  2.3 指定类型,必填和默认值(对象套对象写法)
  	props: {
    	msg: {
      	type: String, //类型
      	required: true, //必要性
      	default: '老王' //默认值}},
3.代码:
  3.1子组件:
        <template>
        <div>
          <button>后退</button>
          {{title}}--->{{msg}}
          <button>前进</button>
        </div>
        </template>

        <script>
        export default {
          name: "child",
          // props:['msg',],
          // props:{
          //   msg:String
          // },
          props:{
            msg:{
              type:String,//类型
              required: true, //必要性
              default:'lili'//默认值
            }
          },
          data(){
            return{
              title:'首页'
            }
          }
        }
        </script>
 3.2 父组件:
    <template>
      <div id="app">
        <h1>App</h1>
        <child :msg="true"></child>
      </div>
    </template>
    <script>
    import child from "@/components/cj"
    export default {
      name:'App',
      components:{
        child
      }
    }
    </script>

混入

1.混入:mixin(混入) 可以把多个组件共用的配置提取成一个混入对象
把多个组件中公用的东西,抽取出来,以后可以全局使用和局部使用---类似于父类
2.使用步骤:

	2.1 写个mixin/index.js
        export const ds = {
            data() {
            return {
              name: 'lili'
            }
          },
            methods: {
                handleClick() {
                    alert(this.name)
                }
            },
        }
    2.2局部导入:在组件中(@/mixin--@是src文件夹路径)
        import {ds} from "@/mixin";
        mixins:[ds,]
    2.3 全局使用,在main.js 中  以后所有组件都可以用
        import {ds} from "@/mixin";
        Vue.mixin(ds)
 3.代码:
	index.js:
        export const ds = {
          data(){
              return{
                  name:'lili'
              }
            },
            methods:{
            handleClick(){
              alert(this.name)
            }}}
    局部导入:
        <template>
          <div id="app">
            <h1>App</h1>
            <button @click="handleClick">提交</button>
          </div>
        </template>
        <script>
        import {ds} from "@/mixin"
        export default {
          name:'App',
          mixins:[ds,]
        }
        </script>
   全局导入:main.js中
		import {ds} from "@/mixin";
         Vue.mixin(ds)

插件

1.插件功能:用于增强Vue
2.本质:包含install方法的一个对象,install的第一个参数是Vue,第二个以后的参数是插件使用者传递的数据
3.使用步骤:

  3.1 写一个 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 定义全局组件
            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;
                },
            });
        }
    }
    3.2 在main.js 中使用插件
        import plugins from '@/plugins'
        Vue.use(plugins)  // 本子,使用use,会自动触发插件对象中得install
    3.3 之后在组件中可以直接用插件中写的数据

scoped样式

1.scoped样式:在styple上写 ---只针对于当前组件生效

localStorage与sessionStorage

1.window 浏览器对象有的东西
2.浏览器中存储数据:
2.1 永久存储:localStorage 不登录加购物车,没登录 搜索过的商品
2.2 关闭页面数据就没了(临时存储):sessionStorage
2.3 设定一个时间,到时候就过期:cookie
3.序列化和反序列化
3.1 对象转json字符串:JSON.stringify(对象)
3.2 json字符串转对象:JSON.parse(字符串)
4.代码:

<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">向localStorage放数据</button>
    <button @click="getSessionStorage">获取localStorage数据</button>
    <button @click="removeSessionStorage">删除localStorage数据</button>

    <h1>cookie操作</h1>
    <button @click="saveCookie">向localStorage放数据</button>
    <button @click="getCookie">获取localStorage数据</button>
    <button @click="removeCookie">删除localStorage数据</button>
  </div>
</template>
<script>
import cookies from 'vue-cookies'
export default {
  name: 'App',
  data() {
    return {}
  },
  methods: {
    saveStorage() {
      var person = {
        name: 'lili',
        age: 19
      }
      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() {
      var person = {
        name: 'lili',
        age: 19
      }
      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 scoped>
h1 {
  background-color: aqua;
}
</style>

集成elementui

1.第三方样式库:
1.1 饿了么团队:elementui
1.2 移动端的ui:vant
1.3 iview
2.使用步骤:
2.1 安装:npm i element-ui -S
2.2 在main.js中引入

标签:vue,name,05,js,---,localStorage,组件
From: https://www.cnblogs.com/040714zq/p/16846061.html

相关文章

  • vue3+vant 引入Dialog Toast都会失败报错not defined
    今天在封装vant组件的时候,刚好要用到toast提示信息的组件,索性就按照官网提供的引入方法进行正常的引入,嘿,好家伙,一顿操作下来后发现竟然报Toast未定义,这就纳闷了,明明步骤都......
  • 【2022-10-31】前端Vue框架(五)
    一、Vue项目目录介绍myfirstvue#项目名字node_modules#文件夹,内部有很多当前项目依赖的模块,可以删除,npminstallpublic......
  • Vue学习-05
    Vue项目目录介绍myfirstvue          叫什么都可以项目名字node_modules        文件夹,内部有很多当前项目依赖的模块,好多小文件运行起来非常慢,可......
  • vue学习笔记
    今日内容概要vue项目目录介绍es6的导入导出语法vue项目开发规范vue项目集成axiovue项目前后端打通props配置项混入插件scoped样式localStorage和sessionStora......
  • vue3在页面中展示PDF
    添加PDF预览插件npminstallvue-pdf-embednpminstallvue3-pdfjs使用插件来展示pdfimport{reactive,onMounted,computed}from"vue";importVuePdfEmbedfro......
  • vue(一)
    Vue.js使用了基于HTML的模板语法,允许开发者声明式地将DOM绑定至底层Vue实例的数据。所有Vue.js的模板都是合法的HTML,所以能被遵循规范的浏览器和HTML解析器解......
  • vue 文件流导出获取后端文件名称
    response.addHeader("Content-Disposition","attachment;filename="+java.net.URLEncoder.encode(filename,"UTF-8"));在后端的接口中开放这个这个响应头,前端的respons......
  • [Vue]局域网无法访问
    1.新建VUE项目局域网无法访问修改package.json文件#重新初始化npminstall#启动项目npmrundevVITEv3.2.2readyin323ms➜Local:http://10.......
  • vue项目创建
    Vue项目vue项目创建创建vue项目在确认的路径下输入命令vuecreatemyfirstvueide的选择vscode,webstorm:jetbrains公司的,跟pycharm一家的,使用习惯一样选择使用......
  • 使用Vue来制作导航栏超级简单
    在我们还没有学习Vue的时候一般都是使用JQ来制作导航栏,但是太复杂。而使用Vue来制作你会发现异常简单话不多说上代码 css代码随便写一写样式  HTML部分,要给div......