2018-03-20

Vue实例与数据绑定

2018-03-20 - 简书.png
var app = new Vue({
  //选项
  })

变量app就代表了这个Vue实例
必不可少的选项el
el用于指定一个页面中已存在的DOM元素来挂载Vue实例,它可以是HTMLElement,也可以是CSS选择器

<div id="app"></div>

var app = new Vue({
  el: document.getElementByI('app')
  })

挂载成功后,通过app.$el来访问该元素。

生命周期

var app = new Vue({
  el: '#app',
  data: {
    a: 2
  },
  created: function (){
    console.log(this.a);
  },
  mounted: function (){
    console.log(this.$el);
  }
  })

Vue生命周期钩子与JQuery类似

  • created 实例创建完成后调用,但尚未挂载,$el不可用
  • mounted el挂载到实例上后调用,一般在这里开始第一个业务逻辑
  • beforeDestroy 实例销毁之前调用,主要解绑一些使用addEventListener监听的事件等。

插值与表达式

使用双大括号{{}}是最基本的文本插值方法,它会自动将双向绑定的数据显示出来。

<div id="app">
  {{ book }}
</div>
<script>
  var app = new Vue({
    el: '#app',
    data: {
      book: 'Vue实战'
    }
    })
</script>

内容实时替换。

<div id="app">
  {{ date }}
</div>
<script>
  var app = new Vue({
    el: '#app',
    data: {
      date: new Date()
    },
    mounted: function (){
      var _this = this; //声明一个变量指向Vue实例this,保证作用域一致
      this.timer = setInterval(function(){
        _this.date = new Date();
        },1000);
    },
    beforeDestroy: function (){
      if (this.timer) {
        clearInterval(this.timer);
        //在Vue实例销毁前,清除定时器
      }
    }
    })
</script>

这里的{{ date }}输出的是浏览器默认的时间格式。
若想输出HTML,则

<div id="app">
  <span v-html="link"></span>
</div>
<script>
  var app = new Vue({
    el: '#app',
    data: {
      link: '<a href="#">这是一个链接</a>'
    }
    })
</script>

除了綁定值,还可以进行简单的运算

<div id="app">
  {{ number / 10 }}
  {{ isOK ? '确定' : '取消' }}
  {{ text.split(',').reverse().join(',') }}
</div>
<script>
  var app = new Vue({
    el: '#app',
    data: {
      number: 100,
      isOK: false,
      text: '123,456'
    }
    })
</script>

Vue.js只支持单个表达式,不支持语句和流控制。

过滤器

Vue.js支持在{{}}插值的尾部添加一个管道符|

<div id="app">
  {{ date | formatDate }}
</div>
<script>
  var padDate = function(value) {
    return value < 10 ? '0' + value : value;
  };

  var app = new Vue ({
    el: '#app',
    data: {
      date: new Date()
    },
    filters: {
      formatDate: function (value) {
        //value过滤数据
        var date = new Date(value);
        var year = date.getFullYear();
        var month = padDate(date.getMonth() + 1);
        var day = padDate(date.getDate());
        var hours = padDate(date.getHours());
        var minutes = padDate(date.getMinuters());
        //将整理好的数据返回出去
        return year+'-'+month+'-'+day+''+hours+':'+minutes+':'+seconds;
      }
    },
    mounted: function () {
      var _this = this;
      //声明一个变量指向Vue实例this,保证作用域一致
      this.timer = setInterval(function() {
        _this.date = new Date();
        },1000);
    },
    beforeDestroy: function () {
      if (this.timer) {
        clearInterval(this.timer);
      }
    }
    })
</script>

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1、页面渲染的步骤是什么? 具体分为5步:(1)HTML解析出DOM树(2)CSS解析出style样式表(3)将两...
    猫熊猫熊阅读 3,502评论 0 0
  • 最近被李菲儿在《跨界冰雪王》的表线实力圈粉,看着她从冰刀菜鸟一步步变成冰上舞动的精灵,印证了那句话越努力的人,越幸...
    艾达壹读阅读 2,622评论 0 2
  • 千千万万个我立在那里 摇摆呼吸踩着土地 一天就是一次枯荣 夕阳在沉没 青春在放歌 五千年就是一次回忆 肉体在糜烂 ...
    品斯基阅读 689评论 0 0
  • 两个居家女 最近的嗜好:做菜,看DIY网,看家居装修。 每次逛宜家,总有种让人想要结婚买房的冲动。喜欢那种北欧的简...
    420_c644阅读 1,566评论 0 0