善假于物:前端mvvm框架vue.js

工欲善其事必先利其器(多学一点知识,少写一行代码:)

vue学习笔记

关于vue

(2015年 前端也开始模块化工程化了,前端框架层出不穷)
vue的作者是ex-Googler,阿里的Weex(vue作者说不介意叫Vue-Native呵呵)也是借鉴了vue

需要知道的基础知识

先看一个 todolist栗子

    html
    //要操作的对象
    <div id="app">
    //绑定模型 按键事件
      <input v-model="newTodo" v-on:keyup.enter="addTodo">
      <ul>
        //循环
        <li v-for="todo in todos">
           //文本插值 
          <span>{{ todo.text }}</span>
          //  指令的值 为绑定表达式(参数)
          <button v-on:click="removeTodo($index)">X</button>
        </li>
      </ul>
    </div>
    js
    //创建vue
    new Vue({
        //创建对象        
        el: '#app',
        //属性赋值     
        data: {
            newTodo: '',
            todos: [
                { text: 'Add some todos' }
            ]
        },
        //调用方法
        methods: {
            //方法一 添加todo
            addTodo: function () {
                //去掉空格
                var text = this.newTodo.trim()
                if (text) {
                    //加入数组
                    this.todos.push({ text: text })
                    //置空
                    this.newTodo = ''
                }
             },
             //方法二 删除todo
             removeTodo: function (index) {
                //删除
                 this.todos.splice(index, 1)
             }
         }
    })
  • 双向绑定
    数据(dom文本或结构)和视图同步变化

      var data = { a: 1 }
      var vm = new Vue({
        data: data
      })
      vm.a === data.a // -> true    
      // 设置属性也会影响到原始数据
      vm.a = 2
      data.a // -> 2    
      // ... 反之亦然
      data.a = 3
      vm.a // -> 3
    
    • 数据绑定最基础的形式是文本插值

              <span>Message: {{ msg }}</span>  //2个Mustache 标签
              <span>This will never change: {{* msg }}</span>  //*单次插值
      
    • HTML属性(Attributes) 插入( Vue.js 指令和特殊特性内不能用插值)

              <div id="item-{{ id }}"></div>
      
  • 放在 Mustache 标签内的文本称为绑定表达式
    (一段绑定表达式 由一个简单的 JavaScript 表达式和可选的一个或多个过滤器构成)

      {{ number + 1 }}
      {{ ok ? 'YES' : 'NO' }}
      {{ message.split('').reverse().join('') }}
      //一个限制是每个绑定只能包含单个表达式(坏栗如下,不能这么吃!!!)
      <!-- 这是一个语句,不是一个表达式: -->
      {{ var a = 1 }}
      <!-- 流程控制也不可以,可改用三元表达式 -->
      {{ if (ok) { return message } }}
    
  • 过滤器 (Filter)

      //将表达式 message 的值“管输(pipe)”到内置的 filterA过滤器。
      //过滤器函数始终以表达式的值作为第一个参数。
      //带引号的参数视为字符串,而不带引号的参数按表达式计算。
      //字符串 'arg1' 将传给过滤器作为第二个参数,表达式 arg2 的值在计算出来之后作为第三个参数。
      {{ message | filterA 'arg1' arg2 | filterB }}
    
  • 指令 (Directives)
    是特殊的带有前缀 v- 的特性。指令的值限定为绑定表达式

      //v-if 指令将根据表达式 greeting 值的真假删除/插入 <p> 元素。
      <p v-if="greeting">Hello!</p>
      //有些指令可以在其名称后面带一个“参数” (Argument),中间放一个冒号隔开
      <a v-bind:href="url"></a> // 缩写 <a :href="url"></a>
      <a v-on:click="doSomething"> // 缩写 <a @click="doSomething">
    
  • 修饰符 (Modifiers)
    以半角句号 . 开始的特殊后缀,用于表示指令应当以特殊方式绑定

      //.literal 告诉指令 将它的值 解析为一个字面字符串 而不是一个表达式
      <a v-bind:href.literal="/a/b/c"></a>
    
  • 计算属性

    • 计算属性默认是 getter

       <div id="example">
          a={{ a }}, b={{ b }}
         </div>         
      var vm = new Vue({
      el: '#example',
      data: {
        a: 1
      },
      computed: {
        // 一个计算属性的 getter
        b: function () {
          // `this` 指向 vm 实例
          return this.a + 1
        }
      }
      })
      
        a=1,b=2   
        console.log(vm.b) // -> 2
        vm.a = 2
        console.log(vm.b) // -> 3
      
    • $watch(用于观察 Vue 实例上的数据变动)

      <div id="demo">{{fullName}}</div>
       var vm = new Vue({
        data: {
        firstName: 'Foo',
        lastName: 'Bar',
        fullName: 'Foo Bar'
        }
      })    
      vm.$watch('firstName', function (val) {
      this.fullName = val + ' ' + this.lastName
      })    
      vm.$watch('lastName', function (val) {
      this.fullName = this.firstName + ' ' + val
      })
      //当一些数据需要根据其它数据变化时,通常更好的办法是使用计算属性 而不是一个命令式的 $watch 回调。
      //最优解
      var vm = new Vue({
      data: {
        firstName: 'Foo',
        lastName: 'Bar'
      },
      computed: {
        fullName: function () {
          return this.firstName + ' ' + this.lastName
        }
      }
      })  
      
    • 计算属性setter

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

推荐阅读更多精彩内容