对于vue的学习和总结

这几天在学习vue,觉得还可以吧,现在分享下学习vue的心得和对于vue学习的总结

一、对于vue中的computed 和 watch的理解。

    1、computed:计算属性具有缓存,计算属性只有在它的相关依赖发生改变时才会重新求值。
    2、watch:结果监听 而侦听器watch是侦听一个特定的值,当该值变化时执行特定的函数。
    如:<template>

             <div>{{fullName}}</div>

            <div>{{fullName}}</div>

           <input v-model="question">

      </template>

   <script>

    export default {

        data() {

            return {

               fristName: "cici",

               lastName: "liu",

               question: "",

         },

        computed: {

             fullName: function() {

                   return this.fristName + " " + this.lastName;

             }

        },

     watch: {

          question: function(val) {

            console.log(val, "dsfgdfgfdgg-------");

           return val;

      },

      fullName: function(val) {

               return val;

         }

     },

}

二、对于filters的理解

      1、定义本地过滤器
      {{data | dataFun}}
      filters:{

            dataFun(val){

                 const data=val | {} {y}-{m}-{d} {h}:{i}:{s}
                  //下面是自行对时间结构的处理
                  return data;

            }

      }
     2、定义全局过滤器

        首先在main.js文件中引用你所要调用的全局的过滤器

        import * as filters from './filters'

        

      // register global utility filters.

      Object.keys(filters).forEach(key => {

           Vue.filter(key, filters[key])

      }) 
       filters 文件中的代码如下:

       export function parseTime(time, cFormat) {

           const format = cFormat || '{y}-{m}-{d} {h}:{i}:{s}'

            //下面是自行对时间结构的处理
            return data;

       }

     直接在页面的使用:<div>{{date | parseTime('{y}-{m}-{d} {h}:{i}:{s}')}}</div>

三、关于对store的理解

        store相当于一个全局存储数据的变量,有两种形式可以进行存储:

             1、同步存储:在国际化时选择语言时可以进行同步存储,选择的是什么语言就直接进行store存储,如果后面的应用还需要用到可存储在localstorage里面或者cookie里面,因为store是存储在内存中的当页面进行刷新后,store中的数据将会被置空,但是localstorage是存储在硬盘中的,cookie是存储在浏览器中的,但是cookie zai 不同的浏览器有不同的存储大小,但一般不超过4KB。因此使用cookie只能存储一些小量的数据。
          2、关于sotre状态管理核心

          状态管理有5个核心,分别是state、getter、mutation、action以及module。分别简单的介绍一下它们:

               2.1、state

                       state为单一状态树,在state中需要定义我们所需要管理的数组、对象、字符串等等,只有在这里定义了,在vue.js的组件中才能获取你定义的这个对象的状态。

              2.2、getter

                   getter有点类似vue.js的计算属性,当我们需要从store的state中派生出一些状态,那么我们就需要使用getter,getter会接收state作为第一个参数,而且getter的返回值会根据它的依赖被缓存起来,只有getter中的依赖值(state中的某个需要派生状态的值)发生改变的时候才会被重新计算。

          2.3、mutation

                  更改store中state状态的唯一方法就是提交mutation,就很类似事件。每个mutation都有一个字符串类型的事件类型和一个回调函数,我们需要改变state的值就要在回调函数中改变。我们要执行这个回调函数,那么我们需要执行一个相应的调用方法:store.commit。

         2.4、action

                 action可以提交mutation,在action中可以执行store.commit,而且action中可以有任何的异步操作。在页面中如果我们要嗲用这个action,则需要执行store.dispatch

        2.5、module

                module其实只是解决了当state中很复杂臃肿的时候,module可以将store分割成模块,每个模块中拥有自己的state、mutation、action和getter。

    3、对应代码:

          在main.js中进行引用,作为全局对象。

           import store from './store'  

              new Vue({

                   store,

             })

          在页面中的使用

          <div @click="clickhandle">点击我获取store中的登陆数据哦</div>

         methods: {

               clickhandle() {

                    console.log(this.$store.getters.token, "---this.$store.getters.token");

                    console.log(this.$store.getters.loginUser,"----this.$store.getters.loginUser");

              }

         },

    对应store文件的代码:

      index.js:

               import Vue from 'vue';

               import Vuex from 'vuex';

               import user from './modules/user'

               import getters from './getters'

              Vue.use(Vuex);

               //store对像要不就是一个数组,要不就是一个对象

             const store= new Vuex.Store({

             modules:{

                      user

              },

              getters

          })

       export default store

    getters.js:

            const getters = {

                   loginUser: state => state.user.loginUser,

                   token: state => state.user.token

           }

         export default getters

    user.js:

         const user = {

                state: {

                       loginUser: {},

                        token:''

                  },

                mutations: {

                        SET_TOKEN: (state, token) => {

                                  state.token = token

                        },

                      SAVE_USERINFO:(state, data)=>{

                                 state.loginUser=Object.assign({},{data});

                       }

               },

         actions: {

                  LoginByUsername({ commit }, userInfo) {

                   const data = userInfo;

                   return new Promise((resolve, reject) => {

                                   commit('SET_TOKEN', 1111)

                                   commit('SAVE_USERINFO',{user:admin:pwd:admin})

                       })

                  }

             }

       }

     export default user 

     备注:通过sotre也可以做国际化,进行语言的切换。

四、对于mock的理解

      官网描述:

            1.前后端分离

            2.不需要修改既有代码,就可以拦截 Ajax 请求,返回模拟的响应数据。

            3.数据类型丰富

            4.通过随机数据,模拟各种场景。

       代码如下:

          在main.js中引入:require('./mock/index')

           mock/index中 

               import Mock from 'mockjs'

               import Detail from './detail'

               Mock.mock(/\/detail\/info/, 'get', Detail.getList)               

             export default Mock

         detail.js文件中:

               import Mock from 'mockjs';

              const List = [];

              List.push(Mock.mock({

                      title: "有了云?服务器还需要防护么?",

                     description: "自从有了云,安全管理员终于可以松了一口气:再也不用为服务器的安全担心了,这是大部分企业安全管理员一开始的想法,但很快他们就会发现,这只是一厢情愿罢了,相比于没有云之前,他们不但需要照顾本地服务器的安全."

          }))

       export default {

            getList: () => {

                   return List;

             }

      }

  vue 页面中的引用:

     import { detailList } from "@/api/detail";

     created() {

           detailList(this.$route.params.id).then(response => {

                  console.log(response.data, "-----data=---");

          });

     }

 在api中的detail文件中:

    

import request from '@/utils/request'

export function detailList(id) {

         console.log(id);

         return request({

                    url: '/detail/info',

                     method: 'get'

          })

      }

 对请求数据流程的理解:

     第一种方式:首先在main.js文件中引入mock,然后页面中去调用api中的函数进行request的请求,如果在main.js中已经引用了mock,那么mock将会拦截http请求,去请求mock中的静态数据,然后再返回在页面中进行显示。

    第二种方式:如果在main.js文件中讲mock引入注销点,http讲根据request的请求进行数据接口请求

五、关于指令的理解

    指令氛围两种:
       一种是自带指令:如:

            v-model双向绑定数据

            v-for循环

           v-show 显示与隐藏

           v-if 判断   v-else     v-else-if   

           v-bind

           v-on 事件

           v-text读取文本不能读取html标签

           v-html  能读取html标签

           v-class 类名

           v-style  与v-class

          v-once  加载一次  如果用到事件中就是事件只执行一次(@click.once="show"

          v-cloak防闪烁

          v-pre  把标签内部的元素原位输出

    另一种是用户自定义指令,如说,当鼠标放上去后可以根据传过来的位置(top\left\right\bottom)来进行hover效果的显示,这个时候就可以用到自定义组件

    代码如下:

          页面:

             <div class="content" v-el-detail.right="'哈哈...我出现啦!'">

                   请将鼠标放在我上面

               </div>

             <div id="div_hover" ></div>

           import elDetail from "@/directive/detail";

           directives: {

                 elDetail

           },

    在指令代码中:

       index.js:            

              import detail from './detail'

             const install = function (Vue) {

                    Vue.directive("el-detail", detail)

             }

           if (window.Vue) {

               window['el-detail'] = detail

               Vue.use(install)

          }

       detail.install = install

       export default detail

  detail.js指令中

      export default {

                bind(el, binding) {

                el.onmouseover = () => {

                        const ele=document.querySelector('#div_hover');

                       if(binding.modifiers.right){

                                 ele.innerHTML=binding.expression;

                                 ele.className="right";

                          }

                 }

              el.onmouseout = () => {

                       const ele=document.querySelector('#div_hover');

                       ele.innerHTML="";

                       ele.className="";

                }

          }

     }

以上是我对学洗vue做的知识点的尝试,有些好的细节就不做说明了。如有什么问题 欢迎来评论和补充。
今天一朋友发了一个关于css方面的文章,地址如下:
    https://mp.weixin.qq.com/s/ZLeTRaEP4zrjnZRvk5EESA

  

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值