码迷,mamicode.com
首页 > 其他好文 > 详细

Vue学习

时间:2016-05-13 12:20:35      阅读:323      评论:0      收藏:0      [点我收藏+]

标签:


Vue学习
  数据绑定
    {{ msg }} 双向
    {{* msg }} 只绑定一次
    {{{ htmlInfo }}} 表示htmlinfo里 有html标签 ,里面的{{}}将不可用
    Vue.partial(‘my-partial‘, ‘<p>This is a partial! {{msg}}</p>‘) 可以动态html并包含{{}}
    {{number+1}}  {{ok?‘yes‘:‘no‘}} {{message.split(‘‘).reverse().join(‘‘)}} 支持js表达式,不支持语句,if,支持三元
    {{ message | filterA | filterB ‘arg1‘ }} 过滤器,可接收参数,不能和js表达式混合,第一参数为message,2为 ‘arg1‘
    <p v-if="greeting">Hello!</p> 指令 可以写表达式判断
    <a v-bind:href="url"></a> == <a href="{{url}}"></a>
    <a v-bind:href="url"></a>==<!-- 缩写 --><a :href="url"></a>
    <a v-on:click="doSomething"></a>==<a @click="doSomething"></a>
  计算属性
    var vm = new Vue({
       el: ‘#example‘,
       data: {
        a: 1
       },
       computed: {
        // 一个计算属性的 getter
        b: function () {
         // `this` 指向 vm 实例
         return this.a + 1
        }
       }
      })
  观察属性
    var vm = new Vue({
         data: {
          firstName: ‘Foo‘,
          lastName: ‘Bar‘,
          fullName: ‘Foo Bar‘
         }
        })

        vm.$watch(‘firstName‘, function (val) {
         this.fullName = val + ‘ ‘ + 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]
        }
       }
      }
  绑定class
    案例  
      <div class="static" v-bind:class="{ ‘class-a‘: isA, ‘class-b‘: isB }"></div>
      data: {isA: true,isB: false}

      <div v-bind:class="classObject"></div>
      data: {
           classObject: {
            ‘class-a‘: true,
            ‘class-b‘: false
           }
          }
  条件渲染
    <h1 v-if="ok">Yes</h1><h1 v-else>No</h1>
      v-show 不同 是改变display
      v-else 可以跟在上面俩个后面
  列表渲染
    v-for
      <ul id="example-1">
       <li v-for="item in items">
        {{$index}}---{{ item.message }}
       </li>
      </ul>
      别名
        <div v-for="(index, item) in items">
         {{ index }} {{ item.message }}
        </div>
      <div v-for="item of items"></div> 新版的
      template
        <ul>
         <template v-for="item in items">
          <li>{{ item.msg }}</li>
          <li class="divider"></li>
         </template>
        </ul>
      vue.js包装的数组方法,能触发视图更新
        push() example1.items.push({ message: ‘Baz‘ })
        pop()
        shift()
        unshift()
        splice()
        sort()
        reverse()
        非变异方法 filter(), concat() 和 slice() 不会修改
          example1.items = example1.items.filter(function (item) {
             return item.message.match(/Foo/)
            })
          替换数组
      track-by 可以设置数组的标识 用来复用
      问题
        vm.items[0] = {} 不认, vm.items.$set(0, { childMsg: ‘Changed!‘})
        vm.items.length = 0 不认,vm.items=[];
      删除
        this.items.$remove(item)
      $key
        <ul id="repeat-object" class="demo">
         <li v-for="value in object">
          {{ $key }} : {{ value }}
         </li>
        </ul>
        <div v-for="(key, val) in object">
             {{ key }} {{ val }}
        </div>
        <div>
         <span v-for="n in 10">{{ n }} </span>
        </div>
      过滤器 filterBy 和 orderBy
  方法处理
    绑定方法
      var vm = new Vue({
       el: ‘#example‘,
       data: {
        name: ‘Vue.js‘
       },
       // 在 `methods` 对象中定义方法
       methods: {
        greet: function (event) {
         // 方法内 `this` 指向 vm
         alert(‘Hello ‘ + this.name + ‘!‘)
         // `event` 是原生 DOM 事件
         alert(event.target.tagName)
        }
       }
      })

      // 也可以在 JavaScript 代码中调用方法
      vm.greet()
      //或html中
      <div id="example">
       <button v-on:click="greet">Greet</button>
      </div>
    内联
      <button v-on:click="say(‘hi‘)">Say Hi</button>
      <button v-on:click="say(‘hello!‘, $event)">Submit</button> // $event.preventDefault() 事件原生对象
  表单绑定
    v-model 
      <input type="text" v-model="message" placeholder="edit me">
      <!-- 当选中时,`picked` 为字符串 "a" -->
      <input type="radio" v-model="picked" value="a">
      <input type="checkbox" v-model="toggle" v-bind:true-value="a" v-bind:false-value="b">
      <input type="radio" v-model="pick" v-bind:value="a"> // 选中 vm.pick === vm.a
    参数特性
      lazy 默认在input事件中同步,加了 lazy 改为 change中同步 <input v-model="msg" lazy>
      number <input v-model="age" number> 保持为数字
      <input v-model="msg" debounce="500"> 延时同步
  过度 (没太细看)
    <div v-if="show" transition="my-transition"></div>
    <div v-show="ok" class="animated" transition="bounce">Watch me bounce</div>
    Vue.transition(‘bounce‘, {
     enterClass: ‘bounceInLeft‘,
     leaveClass: ‘bounceOutRight‘
    })
  组件
    案例
      // 定义
      var MyComponent = Vue.extend({
       template: ‘<div>A custom component!</div>‘
      })

      // 注册
      Vue.component(‘my-component‘, MyComponent)

      // 创建根实例
      new Vue({
       el: ‘#example‘
      })
      // 在一个步骤中扩展与注册,data,el参数选项必须是函数
      Vue.component(‘my-component‘, {
       template: ‘<div>A custom component!</div>‘
      })
      // 局部注册也可以这么做
      var Parent = Vue.extend({
       components: {
        ‘my-component‘: {
         template: ‘<div>A custom component!</div>‘
        }
       }
      })

Vue学习

标签:

原文地址:http://www.cnblogs.com/heroy/p/5486995.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!