vue基础

vue 知识点

1.什么是vue.js?

Vue.js是一套构建用户界面的渐进式框架。



2.Mvvm和mvc的区别

MVC 是后端的分层开发概念。

MVVM是前端视图层的概念,主要关注于视图层分离。

MVC:view model controler

View是视图层负责与用户交互,

Model:模型层,是应用程序中用于处理应用程序数据逻辑的部分。通常模型对象负责在数据库中存取数据。

Controller:控制器,数据模型和视图之间通信的桥梁,

MVVM  Model-View-ViewModel

Modal:模型,指的是后端传递的数据。

View:视图,指的是所看到的页面。

ViewModal:视图模型,mvvm模式的核心,它是连接view和model的桥梁。主要用来处理业务逻辑



3.框架和库的区别
框架:是一套完整的解决方案;对项目的侵入性较大,项目如果需要更换框架,则需要重新架构整个项目。



库(插件):提供某一个小功能,对项目的侵入性较小,如果某个库无法完成某些需求,可以很容易切换到其它库实现需求。



4.插值表达式 将数据展示在页面上的几种方式



V-text ,v-html, {{}}



5.vue防闪烁指令是?



 v-clock



6.Vue指令v-html和v-text的区别



 v-html和v-text都会覆盖原有的内容



 v-htm会解析副文本



v-text 不会解析副文本



7.属性绑定,事件绑定的写法及简写方式



 v-bind 简写:“:”



v-on 简写:“@”



8.什么是双向数据绑定,对应的vue指令是什么



 数据发生改变,视图也改变  视图改变,数据也跟着改变   v-model



9.常见的事件修饰符有哪些,有什么作用,怎么用



.stop 阻止冒泡



.prevent 阻止默认事件



.capture 添加事件侦听器时使用事件捕获模式



.self 只当事件在该元素本身(比如不是子元素)触发时触发回调



.once 事件只触发一次



10.v-for如何遍历数组,对象,数字



 遍历数组:v-for (item,index) in list



遍历对象:v-for (value,key,index) in list



 遍历数字 直接加数字



11.为什么设置key?



v-for key值是提高重排效率(让界面元素和数组里的每个记录进行绑定,key只能显示字符串和数字,key唯一)



12.Vue指令显示隐藏



 v-if 删除dom元素  只修改一次



v-for 设置display;none  用于频繁切换



13.Vue循环渲染



v-for



14.Vue中样式绑定的几种方式(class,style)



data:{



font:' fontsize:32px;color:red',



Class 1:'font',



class 2:'color'



methods:{



getstyle() {



return“fontsize:32px;color:red"



}



(1).绑定style



:style =“fontsize:33px”



:  style="{‘font-size’:'32px'. color:'red'} "



:style =~font"



:style ="getStyle() "括号不能去掉



(2) 绑定classe



:class ="[class1. class 2」",



:class ="['font'color'] "



:class ="{ font:truc. color:false}:



:class ="getClass() ", 括号不能去掉



15.v-if与v-show的作用和区别



v-if删除dom元素v-show设置display:none



16.Vue过滤全局和局部声明方式及使用



过滤器被用作一些常见的文本格式化,可以用在两个地方  {{}}  v-bind



作用:在页面显示值之前加一层过滤,显示过滤后的值。



语法:{{变量|过滤器名}}



{{变量|过滤器名|另一个过滤器名}}



全局定义:Vue.filter()  参数:过滤器名字,函数



私有定义:filters 为实例化vue的一个参数,和data平用



17.键盘修饰符使用



监听所有键盘:v-on:keyup



监听指定键:v-on:keyup.码



自定义键盘别名:vue.config.keyCodes.fi=112



18.vue自定义指令全局和局部声名方式及使用



Vue.directive()全局定义



directives私有定义



参数:



1. 指令的名字(定义的时候不加v-,使用vue指令的时候加上v-)



2. 对象,里面包含三个钩子方法



bind 只调用一次,指令第一次绑定到元素时调用。在这里可以进行一次性的初始化设置



inserted 这个元素已经渲染到界面上之后执行



update 当元素有更新的时候执行



3. 这三个方法的参数有哪些



el:指令所绑定的元素,可以用来直接操作 DOM 



binding:一个对象,包含以下属性:



 name:指令名,不包括 v- 前缀。



value:指令的绑定值,例如:v-my-directive="1 + 1" 中,绑定值为 2。



oldValue:指令绑定的前一个值,仅在 update 和 componentUpdated钩子中可用。无论值是否改变都可用。



19.vue生命周期周期有哪些,各自特点和作用
1.在beforeCreate生命周期函数执行的时候,data 和methods 中的数据都还没有没初始化,一般用于重定向。



2.在created 中,data和methods 都已经被初始化好了,一般用于接口请求和数据初始化。



3.在beforeMount 执行的时候,页面中的元素,还没有被真正替换过来,只是之前写的一些模板字符串。



4.mounted是实例创建期间的最后一个生命周期函数,当执行完mounted就表示,实例已经被完全创建好了,依赖dom的操作放在此处。



5.当执行beforeUnplate的时候,页面中的显示的数据,还是旧的,此时data数据是最新的, 页面尚未和最新的数据保持同步。



6.updated事件执行的时候,页面和data 数据已经保持同步了,都是最新的。7.当执行beforeDestrox,的时候,实例上data和所有的methods,以及过滤器,指令.....都还处于可用状态,此时还没有真正执行销毁的过程,一般用于清除计时器,以及各种监听。



7befordestroy vue实例已经到了运行阶段进入了销毁还没有完全被销毁 都处于可用阶段



8.当执行到destroyed丽数的时候,组件已经被完全销毁了,此时,组件中所有的数据,方法,指令,过滤器。。。都已经不可用了。



20.vue-resource发送get.Post请求



Get this.$http.get(‘url’).then(res=>{})  参数url



Post:this.$http.post(url.{... : ...},{...josn}).then(res=>{}) 参数1.url  2.要发送的数据对象



 3. 指定post提交的编码类型为 application/x-www-form-urlencoded



this.$http.post(url, {categoryId: 'zs' }, { emulateJSON: true }).then(res => {



  console.log(res.body);



});



21.axios发送get.post请求



 GET请求:



 mounted () {



  axios.get(‘url').then(res =>  { 



console.log(  );



   });



post请求:



  mounted () {



axios .post('url').then(res => {



console.log( );



  });



 }



22.Vue中的动画 使用过渡类名



 <transtion>  </transtion>



V-enter  v-enter-to  v-enter-active



V-leave  v-leave-to  v-leave-active



23.vue中的过度动画结合第三方插件使用



 导入动画类库:



<link rel="stylesheet" type="text/css" href="./lib/animate.css">



定义 transition 及属性:



<transition



enter-active-class="fadeInRight"



leave-active-class="fadeOutRight"



 :duration="{ enter: 500, leave: 800 }">



<div class="animated" v-show="isshow">动画哦</div>



</transition>



24.Vue钩子函数动画



 定义 transition 组件以及三个钩子函数:



<div id="app">



<input type="button" value="切换动画" @click="isshow = !isshow">



 <transition



 @before-enter="beforeEnter"



 @enter="enter"



  @after-enter="afterEnter">



  <div v-if="isshow" class="show">OK</div>



  </transition>



</div>



定义三个 methods 钩子方法:



 methods: {



    beforeEnter(el) { // 动画进入之前的回调



el.style.transform = 'translateX(500px)';



      },



  enter(el, done) { // 动画进入完成时候的回调



    el.offsetWidth;



 el.style.transform = 'translateX(0px)';



 done();



 },



  afterEnter(el) { // 动画进入完成之后的回调



  this.isshow = !this.isshow;



    }



}



 定义动画过渡时长和样式:



.show{



transition: all 0.4s ease;



 }



25.Vue设置v-for列表动画



 定义DOM结构,其中,需要使用 transition-group 组件把v-for循环的列表包裹起来:



<div id="app">



 <input type="text" v-model="txt" @keyup.enter="add">



 <transition-group tag="ul" name="list">



  <li v-for="(item, i) in list" :key="i">{{item}}</li>



  </transition-group>



</div>



26.Vue声名组件的方式



 第一种:



 <div id='app'>



  <login></login>



    </div>



     <template id="box">



  <div>



   <p>cscaaca</p>



  </div>



 </template>



<script



Vue.component("login", {



template: "#box"



}     



</script> 



第二种:



vue.extend和vue.compontent



  <div id='app'>



        <login></login>



</div>



<Script>



     Var login = vue.extend({



Template:’<h1>......</h1>



})



Vue.componment(‘login’.login)



Const vm = new vue({



El:’#app’



)}



第三种:



将模块版字符串定义在script中



<script type“x-template” id = “...”>



<p>...</p>



</script>



Vue.componment(“login”(template.”#...”)



第四种:



参数:组件名  对象



vue.compomment.



vue.compomment(regiter,{



Template:’<h1>...</h1>



})



27.父组件如何给子组件传值。



父组件中:



<sonComponentName  sonAccptValueName=”10”



子组件中:props:



sonAcceptValueName:{



Type:[Value,String,Object]/String



defult:10



28.子组件如何给父组件传值,举例说明,写出核心代码即可父组件中;<sonÇomponentName fromSonEventType="fatherComponentFunctionName()"/>



mehords:{



fatherComponentFunctionName(valueFromSon){



conso1e.1og(valteFromSon)-



}



子组件中:<button@click="sendValueFunctonName()"> </button>



子组件中:methods;{



sendValueFunctonName(){



thịs.$emit("fromSonEventTvpe",valueFromSon)



}



29.什么是插槽,有几种,如何使用,举例说明,写出核心代码即可



插槽就是子组件中的提供给父组件使用的一个占位符,用<slot></slot> 表示



默认插槽



<slot></slot>



具名插槽



<template v-slot:[name]>



</template>



30.前端路由和后端路由的区别



前端路由:一个页面通过url中的hash来实现组件切换



后端路由:一个url对应服务器上的一个资源,就是对应一个页面



31.vue路由的基本使用步骤配合代码说明



<div id='app'>



        <router-view></router-view>



    </div>



    <template id="index">



        <div>



            首页



        </div>



    </template>



    <template id="detail">



        <div>



            详情



            <router-view></router-view>



        </div>



    </template>



    <script>



       et index = {



            template: "#son"



        }



        let login = {



            template: "#index",



            data() {



                return {}



            }



        }



        const vm = new Vue({



            el: '#app',



            data: {



            },



            router,



        })



const router = new VueRouter({



                       routes: [



                {



                    path: "/",



                    component: login,



                },



                {



                    path: "/detail",



                    component: {



                        template: "#detail",



                    },



                },



            ],



        });



    </script>



32.路由跳转如何实现,结合代码,两种方式(声明式和函数式)



声明式: 



<router-link to='/login'>登录</router-link>



函数式:



<button @click=“toindex”>登录<button> 



toindex(){



this.$router.push(“/index)



33.路由传参的两种方式,如何获取参数,结合代码



路由传参:



<router-link to='/login?Id=123'>登录</router-link>



函数式:



<button @click=“toindex”>登录<button>



toindex(){



this.$router.push(“/index){



path:”index”



query:{name:”lisi”,id:123}



}



}



34.路由嵌套



声名路由的时候便设置children,children是一个数组,数组里是路由的对象,这个children的组件会渲染在它父组件的<router-view>中.



Children:[



{path:”son”



Component:son



}



]



35.路由高亮



使用默认的样式:



直接设置router-link-active



自定义样式:



配置 linkActiveClass:'自定义的类名'



36.$router和$route的区别 



$router:全局vue.router实例化对象,负责跳转和传参。



$route:接受传参的值



37.如何进行路由重定向结合代码说明如何设置路由嵌套



<div id='app'>



        <router-view></router-view>



    </div>



   <template id="index">



        <div>首页



            <router-link to="/detail"> 去详情</router-link>



        </div>



    </template>



    <template id="detail">



        <div>详情



            <router-link  to="/index"> 去首页</router-link>



        </div>
    </template>
const router = new VueRouter(
            routes: [     
                   path:"/",
                    redirect:"/index"
                },
                {
                    path: "/index",
                   component:login
                }, {
                    path: "/detail",
                    component: {
                       template: "#detail"
                    }
                }
            ]
        }

38.ref的使用

获取dom节点:

给dom节点记上ref属性,可以理解为给dom节点起了个名字。

加上ref之后,在$refs属性中多了这个元素的引用。

通过vue实例的$refs属性拿到这个dom元素。

获取组件

给组件记上ref属性,可以理解为给组件起了个名字。

加上ref之后,在$refs属性中多了这个组件的引用。

通过vue实例的$refs属性拿到这个组件的引用,之后可以通过这个引用调用子组件的方法,或者获取子组件的数据。

<div id = “box ref=boxref”>......</div>

<div id = “box2 ref=box2ref”>......</div>

Monted(){
this.$refs.boxref

This.$refs.$el.box2ref

}

39、vue-cli使用,如何创建和启动项目,项目文件结构

 Vue creat domo

  .git  .idea(开发工具配置)  node-modules(第三方依赖)  public(静态资源)  src(源码) .gitignore(git上传时忽略文件)  babel.config.js  package.josn(项目配置文件)  package-lock.josn  READNE.md

 Vue.config.js(配置管理)

40、属性计算,属性监听

 Wacth

 methods: {},
    watch: {
      'firstName': function (newVal, oldVal) { // 第一个参数是新数据,第二个参数是旧数据
        this.fullName = newVal + ' - ' + this.lastName;
      },
      'lastName': function (newVal, oldVal) {
        this.fullName = this.firstName + ' - ' + newVal;
      }
    }
  });

  watch: {
      '$route': function (newVal, oldVal) {
        if (newVal.path === '/login') {
          console.log('这是登录组件');
        }
      }
    }
  });

  watch: {
      '$route': function (newVal, oldVal) {
        if (newVal.path === '/login') {
          console.log('这是登录组件');
        }
      }
    }
  });

Computed

  computed: {
      fullName: {
        get: function () {
          return this.firstName + ' - ' + this.lastName;
        },
        set: function (newVal) {
          var parts = newVal.split(' - ');
          this.firstName = parts[0];
          this.lastName = parts[1];
        }
      }
    }
  });

监听

  watch: {
      '$route': function (newVal, oldVal) {
        if (newVal.path === '/login') {
          console.log('这是登录组件');
        }
      }
    }
  });

41。什么是同源策略,什么是跨域

浏览器安全协议,要求发送请求时,协议(ip或域名)、端口号(默认是80)、协议必须一致,否则就是跨域。

42、如何解决跨域

(1)、后台后直接开放,危险性大

(2)、jsonp利用script标签的src属性不受同源策略限制,需要前后端配合。麻烦

(3)、配置代理

43、代理如何配置,各个配置项什么意思

在vue.confie.js中写

devServer:{

         proxy:{

                   ‘/api’ (代理名称):{              

                            target:        后端接口域名

                            changeOrigin:true 什么跨域

                            pathRewrite:{‘^/api’:’’}} 路径重写

}

44、如何封装axios,好处是什么

达到扩展和易用的目的

如何封装axios:1.引入axios  2.使用自定义配置文件  3.添加请求/响应拦截器  4导出

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值