美文网首页
vue重新起航(二)

vue重新起航(二)

作者: 阿龙哟 | 来源:发表于2018-10-25 23:10 被阅读0次

创建实例:

var vm = new Vue({

})

    var data = { a : 1}
    var vm = new Vue({
      data:data
    })

    console.log(vm.a == data.a)

    vm.a = 2
    console.log(data.a) //2
    反之相同

vue中数据是响应式的,一旦数据改变,视图将会产生相应的变化
只有当实例被创建时 data 中存在的属性才是响应式的,添加一个新的属性改动将不会触发任何视图的更新

注意 Object.freeze(obj) 可以阻止修改现有属性


vue实例有很多属性和方法
var data = { a: 1 }
var vm = new Vue({
el: '#example',
data: data
})

vm.$data === data // => true
vm.$el === document.getElementById('example') // => true 挂载

// $watch 是一个实例方法 监听
vm.$watch('a', function (newValue, oldValue) {
// 这个回调将在 vm.a 改变后调用
})


生命周期钩子
四对:beforeCreate、created、
beforeMount 、mounted
beforeUpdate、 updated
beforeDestory、destoryed

生命周期.png

模板语法

插值

1.文本{{message}} v-once 一次性插值
2.原始HTML

<p>Using mustaches: {{ rawHtml }}</p>
<p>Using v-html directive: <span v-html="rawHtml"></span></p>
image.png

span的内容将会被替换成属性值rawHtml
3.特性,Mustache 不能用在HTML特性上,用v-bind来绑定
4.支持js表达式

{{ number + 1 }}

{{ ok ? 'YES' : 'NO' }}

{{ message.split('').reverse().join('') }}

<div v-bind:id="'list-' + id"></div>

只能包含单个表达式,下面两种不会生效

<!-- 这是语句,不是表达式 -->
{{ var a = 1 }}

<!-- 流控制也不会生效,请使用三元表达式 -->
{{ if (ok) { return message } }}

指令 v-

参数

一些指令能够接收一个“参数”,在指令名称之后以冒号表示。

<a v-bind:href="url">...</a>
<a v-on:click="doSomething">...</a>

缩写

v-bind :

<!-- 完整语法 -->
<a v-bind:href="url">...</a>

<!-- 缩写 -->
<a :href="url">...</a>

v-on @

<!-- 完整语法 -->
<a v-on:click="doSomething">...</a>

<!-- 缩写 -->
<a @click="doSomething">...</a>

计算属性 computed

模板内的表达式非常便利,但是设计它们的初衷是用于简单运算的。在模板中放入太多的逻辑会让模板过重且难以维护

模板内表达式获取翻转字符串
<div id="example">
  {{ message.split('').reverse().join('') }}
</div>

如果需要多次使用到这个翻转字符串,就会显得很麻烦
所以计算属性computed 应运而生

<div id="example">
    <p>Original message: "{{ message }}"</p>
    <p>Computed reversed message: "{{ reversedMessage }}"</p>
  </div>

  <script>
    var vm = new Vue({
      el:'#example',
      data:{
        message:'hello'
      },
      computed:{
        //计算属性的getter,返回相应的值
        reversedMessage: function(){
          return this.message.split('').reverse().join('')
        }
      }
    })

同样的效果也可以通过在methods里面设置一个函数来实现

<p>Reversed message: "{{ reversedMessage() }}"</p>
// 在组件中
methods: {
  reversedMessage: function () {
    return this.message.split('').reverse().join('')
  }
}

效果完全相同,但是又有什么不一样的地方呢??

计算属性是基于他们的依赖进行缓存的,只有当依赖改变时他们才会重新求值,只要message不改变,多次访问reverseMessage会立即返回之前计算结果。而每当触发重新渲染时,调用方法将总会再执行函数


计算属性 computed和侦听属性watch

Vue 提供了一种更通用的方式来观察和响应 Vue 实例上的数据变动:侦听属性

与其滥用侦听属性,不如好好利用计算属性

<div id="demo">{{fullName}}</div>

var vm1 = new Vue({
      el: '#demo',
      data: {
        firstName: 'Foo',
        lastName: 'Bar',
        fullName: 'Foo Bar'
      },
      watch: {
        firstName: function (val) {
          this.fullName = val + ' ' + this.lastName
        },
        lastName: function (val) {
          this.fullName = this.firstName + ' ' + val
        }
      }

这里就运用了侦听器属性watch来侦听firstName和lastName,这两个如果有变化立刻处理重新渲染页面,但是我们发现,监听的函数很相似,若是有多个变量,那么侦听器将会显得十分冗杂,看看运用computed效果如何?

  <div id="demo">{{fullName1}}</div>

   computed:{
        fullName1: function(){
          return this.firstName + '' + this.lastName
        }
      }
image.png

效果很不错,因此尽量用computed属性

添加set

 var vm1 = new Vue({
      el: '#demo',
      data: {
        firstName: 'Foo',
        lastName: 'Bar',
        fullName: 'Foo Bar'
      },
      computed: {
        fullName1: {
          get: function () {
            return this.firstName + ' ' + this.lastName
          },
          set: function (newValue) {
            console.log('我被调用了')
            var names = newValue.split(' ')
            this.firstName = names[0]
            this.lastName = names[names.length - 1]
          }
        }
      }

这个时候修改fullname firstname, lastname 也会相应更新

image.png

侦听器 watch 当需要在数据变化时执行异步或开销较大的操作时,这个方式是最有用的。

相关文章

  • vue重新起航(二)

    创建实例: var vm = new Vue({ }) vue中数据是响应式的,一旦数据改变,视图将会产生相应的变...

  • Vue重新起航(四)

    事件处理 监听事件:用v-on 来监听DOM事件,并在触发时执行一些JS语句然而有很多操作逻辑很复杂,就不能把大量...

  • vue重新起航(一)

    1.声明和渲染 创建一个Vue实例,并挂载到id为app的标签上 el: ' ' 挂载Vue实例对象 data:V...

  • vue重新起航(三)

    class与style绑定 用v-bind来绑定class和style 对象语法 1.class active是否...

  • development log day11

    假期结束,重新起航

  • 重新起航

    这次学习会的模式进行了大的整改,参加人员都是行政的同事们,以部门为主的分组。相比之前的学习模式,人数上大幅度的减少...

  • 重新起航

    没有付出,哪有收获。也许我是应该找到团队,历练自己。

  • 重新起航

    跌入谷底的疲惫 忧伤的夜独自垂泪 人性的荒凉吞噬着残月 淤泥里挣扎的莲 冲破一切阻力 绽放出生命最初的誓言 熬尽黎...

  • 重新起航。

    吴军老师有封回信讲,做事之前一定要想清自己的动机,以及对达到目标所需要付出的成本有个客观的评价,这样做事就不...

  • 重新起航

    有感于金陵塔罗牌个案 在我的心灵成长之路上,得益于朋友的帮助,家庭的支持,自己的坚持。认识金陵是加入应童老...

网友评论

      本文标题:vue重新起航(二)

      本文链接:https://www.haomeiwen.com/subject/yznctqtx.html