vue基础

v-bind 绑定attribute  例 v-bind:title="message" 简写:title="message" 若某个属性的值是 null、undefined (data中未定义)或 false ,则该属性不会被包含在渲染出来 【属性 不要使用驼峰命名 除非是props】

v-on 绑定事件 简写@click='reverseMess' 内联语句处理器中访问原始的 DOM 事件。可以用特殊变量 $event 把它传入方法

v-once 数据只会在第一次时被渲染

v-html 渲染带html标签的内容 <p v-html="word"></p>     data: {word: '<span style="color:red">内容</span>'}

v-if 条件渲染 可将大段的html代码写在template里,设置v-if ,template不会被渲染 (v-if   v-else-if  v-else )

v-for 列表渲染  例 v-for="(item,index) in list" :key="index"  或者将in改为of   key为字符串或者数值类型  遍历对象(value,key,index) in obj

为什么要用key?
是和vue的虚拟dom和diff算法有关 主要为了高效的渲染dom

v-model 指令,它能轻松实现表单输入和应用状态之间的双向绑定。

   <input type="text" v-model="mess">  实际是:value="mess"    @input="mess=$event.target.value"的语法糖

注意不要在选项属性或回调上使用箭头函数,比如 created: () => console.log(this.a) 或 vm.$watch('a', newValue => this.myMethod())。因为箭头函数并没有 this,this 会作为变量一直向上级词法作用域查找,直至找到为止,经常导致 Uncaught TypeError: Cannot read property of undefined 或 Uncaught TypeError: this.myMethod is not a function 之类的错误。


vue生命周期

动态参数

可以用方括号括起来的 JavaScript 表达式作为一个指令或事件的参数(v-bind和v-on),动态参数预期会求出一个字符串,异常情况下值为 null。这个特殊的 null 值可以被显性地用于移除绑定。任何其它非字符串类型的值都将会触发一个警告。动态参数表达式有一些语法约束,因为某些字符,如空格和引号,放在 HTML attribute 名里是无效的。变通的办法是使用没有空格或引号的表达式,或用计算属性替代这种复杂表达式。

v-bind:class 可以与普通的class共存
    1值可以是一个对象 也可是一个返回对象的计算属性
    2也可是数组、3也可用三目运算符、4也可使用 数组+对象语法

v-bind:style 
1可以是js对象    2data里的对象或者返回对象的计算属性   3数组(多个样式对象)

v-if与v-show:
        v-if若为false 就不会渲染到页面,v-show都会渲染到页面 为false时只是display值为none,频繁的切换用v-show,条件很少改变用v-if,v-show 不支持 <template> 元素,也不支持 v-else。

v-if与v-for:

      v-for 具有比 v-if 更高的优先级。可在最外层套v-if
      v-for:可遍历数组、对象 (值、键、索引)、整数    大段的代码也可用template来包裹 不会被渲染

数组的更新检测:

      变异方法:调用该方法后会改变原本的数组 触发视图更新 push、pop、 shift、 unshift、 splice 、sort、 reverse
      非变异方法:调用该方法不会改变原来数组 但可以新数组替换旧数组 concat、slice、map、filter
      无法检测的数组变化:
            1.利用索引直接设值:vm.items[0]=值   
               解决办法:用Vue.set(target、key、value)  target:要更改的数据源(对象或数组)key:下标 value:修改后的值(多个用对象) 或者实例名.$set    或者用splice
                                 对象的话  实例名.$set / Vue.set(this.obj,'age',1)给对象添加一个新属性并赋值 或者 this.obj=Object.assign({},this.obj,{age:1})
        也可用splice(0,1,'yhx')

            2.修改数组的长度:vm.items.length=1
               解决办法:用splice方法 (会改变原数组)

显示过滤排序后的结果:
            不改变原数据的话 采用计算属性
             在计算属性不适用的情况下 (例如,在嵌套 v-for 循环中) 可以使用一个方法

在组件中使用v-for:
                is="todo-item" 属性。这种做法在使用 DOM 模板时是十分必要的,因为在 <ul> 元素内只有 <li> 元素会被看作有效内容。这样做实现的效果与 <todo-item> 相同,但是可以避开一些潜在的浏览器解析错误。

事件修饰符:
                方法只有纯粹的数据逻辑,而不是去处理 DOM 事件细节
                 .stop(阻止冒泡).prevent(阻止默认事件).capture(使用事件捕获).once(只触发一次).passive(默认行为将会立即触发).self(只在当前元素本身触发)
                注意:修饰符可以串联但顺序很重要 也可只有修饰符没有事件处理函数

v-model:
                   v-model 在内部为不同的输入元素使用不同的属性并抛出不同的事件:
                    text 和 textarea 元素使用 value 属性和 input 事件; 文本插值不会生效应用v-model
                    checkbox 和 radio 使用 checked 属性和 change 事件;切换时true-value="yes" false-value="no"
                    select 字段将 value 作为 prop 并将 change 作为事件。  推荐使用一个默认禁用未选择项

v-model修饰符:
                   .lazy  让事件在change上触发 而不是input
                   .number 将用户输入转为数值类型
                   .trim  自动过滤用户输入的首尾空白字符                

自定义组件:
                    data必须是一个函数 因此每个实例可以维护一份被返回对象的独立的拷贝
                     template用字符串模板 若不使用babel或ts之类的工具 ie不支持,请使用折行转义字符

动态切换组件is:
                     <component :is="which"></component>

全局注册组件与局部注册组件:
                       全局: Vue.component('组件名',{template:``......})
                       局部:在一个实例的components对象选项里注册 ’组件名‘:{template:``,data(){}......}

props:
                HTML 中的 attribute 名是大小写不敏感的,所以浏览器会把所有大写字符解释为小写字符。这意味着当你使用 DOM 中的模板时,camelCase (驼峰命名法) 的 prop 名需要使用其等价的 kebab-case (短横线分隔命名) 命名,单个单词则不需要 如:title  
      

                        其次props也可指定类型,以对象的形式列出,键为prop的名称、值为prop的类型;
                         向子组件传递数字、布尔、数组、对象需用v-bind ,否则传递过去的是string  (type of 查看)
                         子组件不能改变props,可以定义一个data将props赋值,也可使用计算属性;
                         父组件传递子组件的class和style 会合并其子组件的相关属性(使用插件的时候尤为重要),其他的attribute 将替换掉子组件的相关属性
                         如果你希望组件的根元素继承 attribute,你可以在组件的选项中设置 inheritAttrs: false(不会影响 style 和 class 的绑定。)

props验证:

自定义事件:使用 kebab-case 的事件名。短横线命名

将原生事件绑定到组件:
                          .native修饰符         $listeners

.sync修饰符:子组件改变带.sync的prop值,会同步改变父组件中绑定的值 ,实现双向绑定
                        :foo.sync='msg'     =>      :foo='msg',@update:foo='val=>msg=val'
                         this.$emit=('update:foo',参数)

自定义组件之间的通信:
                     父子之间:子组件上自定义一个事件@自定义事件名=’处理函数‘,内部调用该事件用$emit('自定义事件名')来调用,若传参 $emit(自定义事件名,参数), 事件吹函数是内联可以用$event 访问到这个参数 ,事假处理函数也可以是一个methods里的方法传参
                      使用v-model,接收一个value的props实现双向绑定 <input type="text" :value='value' @input="$emit('input',$event.target.value)">

插槽: 组件间书写的内容要被渲染,(也可是html标签)就要在组件模板中设置插槽,也可在插槽中设置默认内容,若组件无内容,默认内容就会被渲染出来。<slot>默认内容</slot> 单个slot
              具名slot:也可与单个slot共存  不带name的slot 相当于v-slot:default


具名slot

            父级模板里的所有内容都是在父级作用域中编译的,子模板里的所有内容都是在子作用域中编译的。
            作用域插槽:是一种特殊的slot,子组件设置了插槽,该插槽访问了子组件所维护的数据,在父组件中能访问到该数据

mySlotProps 是个包含所有插槽属性的对象

                            v-slot:default='mySlotProps' 可简写为v-slot=’mySlotProps‘或者#default='mySlotProps'

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

推荐阅读更多精彩内容

  • 一、简单介绍 Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。 学习此框架你...
    运维开发_西瓜甜阅读 1,012评论 0 12
  • 安装 兼容性 Vue不支持IE8及以下版本。 引入 直接下载并用 标签引入,Vue会被注册为一个全局变量。开发版本...
    oWSQo阅读 864评论 1 0
  • vue基础 --- #### 小知识(老陈vue) * 1、在node.js/npm相当于java中的maven...
    大脸妹m阅读 235评论 0 0
  • 一、Vue简介 Vue.js 是一个用于创建 Web 交互界面的库。它让你通过简单而灵活的 API 创建由数据驱动...
    雪妮爸爸阅读 1,093评论 0 1
  • 一、Vue起步 MVVM模式(Model-View-ViewModel)ViewModel是Vue.js的核心,它...
    jiahzhon阅读 171评论 0 0