vue学习的第三天小结

回顾:

```

Object.defineProperty

let obj = {

  a:10

}

let a = 10;

Object.defineProperty(obj,'a',{

  get(){

    // 拦截了 对于 obj对象a属性 获取的操作

    return a;

  },

  set(val){

    // 拦截对于obj对象a 赋值的操作

    a = val;

  }

})

obj.a = 20;

new一个 vue实例

  data:{

    a:{

      a:{

        b:{}

      }

    }

  }

  vue 自动遍历(递归),data属性,将所有的 属性都 放到 getter/setter(池),设置 任意一个数据,对于setter就会拦截到,通知 watcher 自动去调用函数 render,生成 虚拟dom,跟上一次 已经缓存的虚拟dom进行比较(diff算法),得到最优渲染方案,尽量较少dom操作

  问题?

    1,对象,  对象如果是 动态添加的 监听不了 (数据变化不会刷新)

    2,数组  arr[下标]=值   arr.length = newLength

      Vue.set()

      this.$set(对象,属性,值)

      this.$set(数组,下标,值)

```

## 表单修饰符 修饰v-model

+ lazy

  将 v-model 由原来 input事件改为 change事件触发

+ number

  将v-model绑定的值,自动过滤成数字(按照parseFloat 顺序解析)(如果需要开头就是非数字字符,失去功能)

+ trim

  去除开头结尾空格

## ref  方便获取dom

```

vue 尽量不要去操作dom,以数据驱动

<div ref="box">

<p ref="op">

实例  this.$refs

      {

        box:div, //div这个dom对象

        op: p //p这个dom对象

      }

    this.$refs['box']

    this.$refs.box

```

## 侦听器 (监控 数据变化,数据变化时,回调自动触发)

新增 watch属性

什么时候用: 需要 监听一个数据变化,当这个数据变化时,我需要做其他的操作

```

新增 watch属性

let vm = new Vue({

  el:'xx',

  data:{

    msg:"a",

    obj:{

      a:10,

      b:20

    }

  },

  watch:{

    // 监听基本数据类型

    msg(newVal,oldVal){

    },

    // 监听对象属性

    'obj.a'(newVal,oldVal){

    },

    // 监听对象

    obj:{

      handler(newVal,oldVal){

      },

      deep:true //深度监听

    }

  }

})

```

## 计算属性

```

语法:

  新增 computed属性

  {

    data:{

      msg:'hello world'

    },

    computed:{

      msg2(){ // 写法是 方法 编译到实例上  是和 data中的属性一样的 值(不是函数)

        return this.msg.split('').reverse().join('');

      }

    }

  }

  注意:

    计算属性  名字 不能和 data(methods)中 已存在的 属性  重名

    计算不要去修改 计算属性的值  应该去修改 计算属性依赖的值

  如果需要修改计算属性

  计算属性 需要 使用 get和set的写法

  {

    data:{

      msg:'hello world'

    },

    computed:{

      msg2:{

        get(){

          return this.msg.split('').reverse().join('');

        },

        set(val){

           // 每一次修改  计算属性时,set触发,同时,修改的值,通过val传入

           this.msg = val;

        }

      }

    }

  }

```

## 组件

理解网页上 独立 区域(每一个标签都可以理解为是一个组件)

vue组件  组件 也是 Vue的实例(不是显式new Vue)(new Vue创建实例),实例有的方法组件都有

```

如何创建组件

  取决这个组件定义的哪里

  全局组件

    在任意其他的组件中 都可以使用

    Vue.component(组件名,{

      template: 指定当前组件的 视图

      data,

      methods,

      watch,

      computed

    })

    eg:

       let CommonHead = {

        template:`

          <div>

            <h1>我是公共的头部{{title}}</h1>

            <h2>我是组件的副标题</h2>

            {{ msg }}

            {{ msg2 }}

            <button @click="change">改变title</button>

          </div>

        `,

        data(){

          return {

            title:"我是标题",

            msg:'hello world'

          }

        },

        methods:{

          change(){

            this.title = "我是另一个标题"

          }

        },

        computed:{

          msg2(){

            return this.msg.split('').reverse().join('')

          }

        }

      }

      // Vue.component('CommonHead',CommonHead);

      Vue.component('common-head',CommonHead);

  局部组件

    在其他实例的 components属性中注册

    let SubHead = {

      template:`

        <div>

          我是局部组件

        </div>

      `

    }

    let CommonHead = {

      template:`

        <div>

          <h1>我是公共的头部</h1>

          <sub-head></sub-head>

        </div>

      `, 

      components:{

        SubHead

      }

    }

  注意:

    1,组件的data属性必须是 函数 返回 对象(组件 需要复用,如果直接是对象,那么多次使用,使用的是同一个对象,),函数返回对象(闭包),让 组件在每一次使用的时候,都一个独立空间

    2,组件的template 必须,只有一个根元素

    3,每个组件都有自己的作用域(data中数据只能在自己的template渲染,自己template中绑定方法,只能是自己这个组件methods中的)

```

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