vue基础

条件渲染

v-if 与 v-show 的区别

  • 1、他们都能实现元素的显示和隐藏

  • 2、v-show只是简单的控制元素的display属性(不管条件为真还是为假,这个元素都会被渲染出来);而v-if才是条件渲染(条件为真,元素会被渲染,条件为假,元素会被销毁)。

  • 3、v-show有更高的首次渲染开销;v-if的首次渲染开销要小很多。

  • 4、v-if有更高的切换开销,v-show切换开销比较小。

  • 5、v-if有配套的 v-else-if 和 v-else,而v-show没有。

  • 6、v-if可以搭配template使用,而v-show不行。

mixins混入

定义里一个对象,这个对象包含有vue组件实例相关的选项的一个对象,可以混入到实例vue中,就变成了一个公有属性。data如果是一个混入对象的选项,那么data需要设置为工厂模式,否则实例vm1修改data里的内容,也会影响到vm2里的内容。除了 el 与 propsData 这两个选项之外,其他的选项都可以写在定义的对象中混入。


var vm1 = new Vue({

    el:"#app1",

    mixins:[common],

    data:{

      mes:"world",//自身有就用自身的

      title:"toutou"

    },

    //生命周期函数  两个都会执行  自身和公用都有的话,先执行公有的,再执行自身的

    mounted(){

        console.log("自身的")

      }

})

组件

  • 组件的三大原则:==灵活性、复用性、高度可扩展性==。

组件中的使用情况

  • 1、 组件的使用,先注册,然后用组件名字做为标签来使用。

  • 2、 组件必须要有一个 template 选项,来指定这个组件的模板内容。

  • 3、 组件的data选项,必须是一个函数返回对象的形式。

  • 4、 组件的命名不能跟html标签冲突。

  • 5、 组件的template选项只能有一个根元素(就是只能有一个大盒子)。

  • 6、 全局注册的组件 Vue.componet 必须写在 new Vue之前。

  • 7、 组件的命名可以尽量使用短横线方式,也可以用驼峰式命名;但是使用的时候需要换成短横线方式,否则会报错找不到。

    • 7.1 使用 x-template 的script标签的方式的时候可以不用考虑短横线命名的规则;使用单文件组件,也不需要考虑这条规则。

组件注册分为全局注册和局部注册

1、全局注册 Vue.component(组件的名字,组件的选项对象)

2、局部注册 components 写在Vue实例的内部

全局注册与局部注册的区别

局部注册的组件,在谁身上注册的就只能用在那个身上。
全局组成的组件可以在任意地方使用,但是必须要在 new Vue之前注册。

组件的写法
  1. 直接使用 模板字符串的方式 template标签

  2. 使用单文件组件 (推荐)

  3. 使用 script 标签的方式 type="text/x-template"

组件的通信

  • 父与子的通信

1、需要在子组件中定义props选项,来确定我需要哪些prop。

2、父组件在调用子组件的时候,需要传递prop下来,使用prop作为自定义属性来写在子组件的标签身上。

父组件给子组件传递一个属性prop,子组件用props接收后,就可以使用父组件的prop。

  • 子与父的通信

1、父调用子组件的时候,在子组件标签上绑定一个自定义事件。

2、子组件在某个时刻,触发父亲给绑定事件。

父组件给子组件绑定一个自定义事件,子组件需要修改的时候,触发父组件绑定的事件并且传递参数过去,父组件接收后就可以修改了。

组件之间的通信除了用props父传子,$emit子传父,还有一些特殊操作(不推荐)

1、ref 用在组件标签上,通过$ref获取到DOM元素直接修改上面的内容

2、$root 实例属性可以拿到跟组件对象,也就是new Vue 出来的实例

3、$parent 实例属性,可以拿到当前组件的父组件的实例对象

4、$children 实例属性,去获取子组件的实例,得到的是一个子组件实例的集合

ref属性

  • ref这个属性,可以写在标签上,也可以写在组件标签上。
  • 写在标签上使用$refs获取到的是 DOM对象
  • 写在组件标签上获取到的是 组件对象

v-model 其实是一种语法糖形式


    <input type="text" :value="name" @input="name = $event.target.value" />

注:$event

1、 $event用在普通的标签上,代表着事件对象。

2、 $event用在组件的标签上,代表着触发这个事件是传递过来的参数。

插槽

默认在组件开始标签与结束标签中写的内容是无效的,如果需要将内容渲染出去,就需要使用插槽 slot 。

  • slot 是不限制次数的。

  • slot 是可以命名的;slot 组件上使用 name 属性给他命名,那个插槽模板内容要放到那个 slot 坑里面,就需要带着 name 的名字 slot=“name”。

  • slot 还可以有个默认不加锁的坑,没写name的就默认放在这个坑里。

作用域插槽

把组件内数据能够在插槽模板内容中使用。

使用步骤:

1、在 slot 标签上写自定义的属性,但是不能是 name。

2、在相应的 slot 的插槽模板内容上面使用 slot-scope 接收第一部中传递过来的 porp集合。

插槽新语法,具名插槽(v-slot可以简写成 # )

1、先在组件中的template中的slot标签上定义一个名字,但是不能是name。

2、在页面上用<template v-slot:msg></template>标签,里面写v-slot:msg,也可以接收参数v-slot:msg=“obj",obj是一个对象,可以传入多个属性。


    Vue.component('hello',{

        template:`

            <div>

              <slot :msg="msg"></slot>

            </div>

        `

    })



    //页面上使用

    <template v-slot:abc="obj">

        <h1>我是新写法--{{ obj.msg }}</h1>

    </template>

注:其实<slot></slot>空标签有一个默认default属性。


    <template v-slot:default="obj">

    </template>

非props特性

在使用组件的时候,在组件标签上写的特性,如果组件内部没有通过props选项去接收,那么这个特性就叫做非props特性,非props特性会自动写入到组件的根元素上。

  • 非props的合并和替换已有的特性

除了class和style不会被替换,其他属性都会被替换,除了class和style会被合并,其他属性都不会被合并,只会替换。

禁用特性继承 inheritAttrs: false

inheritAttr:false 不会影响style和class的绑定。

获取非props特性

$attrs 能够拿到非props特性,但是class和style拿不到。

生命周期钩子

生命周期分为八个步骤:

1、beforeCreate (创建之前)

2、created    (创建之后)

3、beforeMount (挂载之前)

4、mounted   (挂载之后)

5、beforeUpdate (更新之前)

6、updated    (更新之后)

7、beforeDestroy (销毁之前)

8、destroyed   (销毁之后)

一般在beforeDestroy这个生命周期做一下清除的事情(比如清除定时器,监听滚动条)

想要拿到组件中的dom元素,需要在mounted这个生命周期函数之后才能获取到。

通过axios发ajax请求

使用axios需要先引入axios的js

和jquery一样,axios有三种写法:


axios(

    {url:"url地址",

    methods:'get',

    params:{

        data:'请求带过去的东西'

    }).then();



axios.get(url,options);

axios.post(url,options);

还可以对 axios 做一个请求或响应拦截,实现登陆校验的验证,验证token

fetch发ajax请求


// fetch 的get请求方式

fetch(url).then(res=>{

    return res.json();  //通过fetch获取到的需要通过json转换拿到想要的数据 

    }).then()

                        //转换之后还需要return回去下面继续链式调用

// fetch post请求方式

fetch('url',{

  method:'post',

  body:JSON.stringify({  可以带参数去请求,但是要转换成json字符串格式

    username:'zhangsan',

    password:'123'

  })

})

注意: fetch有个问题,获取失败,但是第二个.then会执行, 

    请求404没找到catch抓取不到,不会走到catch回调中去。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,457评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,837评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,696评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,183评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,057评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,105评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,520评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,211评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,482评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,574评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,353评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,897评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,489评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,683评论 2 335

推荐阅读更多精彩内容