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'

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

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

友情链接更多精彩内容