zoukankan      html  css  js  c++  java
  • Vue入门笔记02(基础)

    全局组件

    Vue.component('alert', {
      template: '<button @click="on_click">全局组件-弹出框</button>',
      methods: {
        on_click: function () {
          alert('Yo');
        }
      }
    });

    局部组件

    //定义局部组件
    var Alert2 = {
      template: '<button @click="on_click">局部组件-弹出框2</button>',
      methods: {
        on_click: function () {
          alert('Yo2');
        }
      }
    }
    var vue = new Vue({
      el: '#app',
      components: {
        alert2: Alert2 //注册局部组件
      }
    });

    html模板与组件代码分离

    <template id="myTitleCom">
      <div>
        <span @mouseover="showTip" @mouseout="hideTip">{{title}}</span>
        <span v-if="isShow">{{tip}}</span>
      </div>
    </template>
    //将组件的内容定义在html中,并在template中引用html的id
    Vue.component('mytitle', {
      template: '#myTitleCom',
      data: function () {
        return {
          title: 'Hello'
        }
      }
    });

     计算属性computed

    <template id="scoreTableCom">
      <table>
        <tr><td>数学</td><td><input type="text" v-model.number="math"/> </td></tr>
        <tr><td>英语</td><td><input type="text" v-model="english"/></td></tr>
        <tr><td>物理</td><td><input type="text" v-model="physics"/></td></tr>
        <tr><td>总分</td><td><input type="text" v-model="sum"/></td></tr>
        <tr><td>平均</td><td><input type="text" v-model="average"/></td></tr>
      </table>
    </template>
    Vue.component('score-table', {
      template: '#scoreTableCom',
      data: function () {
        return {
          math: 90,
          english: 80,
          physics: 40
        }
      },
      computed: {    //计算属性使用
        sum: function () {
          return this.math + this.english + this.physics;
        },
        average: function () {
          return (this.sum/3).toFixed(2);
        }
      }
    });

     管道过滤filter

    <template id="priceCom">
      <div>
        <span>{{price | currency}}</span>
        -
        <span>{{price*8 | currency('usd')}}</span>
      </div>
    </template>
    Vue.component('price', {
      template: '#priceCom',
      data: function () {
        return {
          price: 10
        }
      }
    });
    Vue.filter('currency', function (val, unit) { 
      val = val || 0;
      unit = unit || '元';
      return val + ' ' + unit;
    });

    自定义指令directive

    <template id="cardCom">
      <div>
        <div v-pos:red.top.right=card1.pinned class="card">
          <button @click="card1.pinned=!card1.pinned">钉住/取消</button>
          <h3>card1:{{card1.pinned}}</h3>
          This a card content !
        </div>
        <div v-pos:blue.bottom.right=card2.pinned class="card">
        <button @click="card2.pinned=!card2.pinned">钉住/取消</button>
        <h3>card2:{{card2.pinned}}</h3>
        This a card content !
      </div>
      </div>
    </template>
    //定义组件
    Vue.component('card', {
      template: '#cardCom',
      data: function () {
        return {
          card1: {pinned: true},
          card2: { pinned: true}
        }
      }
    });
    // 定义指令
    Vue.directive('pos', function (el, binding) {
      var pinned = binding.value;
      var position = binding.modifiers;
      var warning = binding.arg;
    
      if(pinned){
        el.style.position = 'fixed';
        for(key in position){
          el.style[key] = '10px';
        }
      }else{
        el.style.position = 'static';
      }
      if(warning) {
        el.style.color = warning;
      }
    });

    混合使用mixins

    var base = {
      data: function() {
        return {
          visible: false
        }
      },
      methods: {
        show: function () {
          this.visible = true;
        },
        hide: function() {
          this.visible = false;
        }
      }
    }
    Vue.component('mix', {
      template: '<div>' +
      '<h4 @mouseover="show" @mouseout="hide">mixins使用-hover me</h4>' +
      '<span v-if="this.visible">test</span>' +
      '</div>',
      mixins: [base]
    });

    插槽slot

    Vue.component('panel', {
      template: '#panelCom'
    });
    <template id="panelCom">
      <div class="panel">
        <div class="title">
          <slot name="title">default title</slot>
        </div>
        <div class="content">
          <slot name="content">default content</slot>
        </div>
        <div class="footer">
          <slot name="footer">default footer</slot>
        </div>
      </div>
    </template>
    <panel>
    <div slot="content">this is the custom content !</div>
    </panel>
    .panel{border:1px solid #ccc;padding:5px; width:220px;}
    .panel .title{border-bottom: 1px solid #ccc;}
    .panel .footer{border-top: 1px solid #ccc;}

    平级组件通信

    var Event = new Vue();
    Vue.component('Asay', {
      template: '<div>我说:<input @keyup="on_change" v-model="a_said"></div>',
      data: function () {
        return {
          a_said: ''
        }
      },
      methods: {
        on_change: function () {
          Event.$emit('a-say-something', this.a_said);
        }
      }
    });
    Vue.component('Bsay', {
      template: '<div>A说:{{a_said}}</div>',
      data: function () {
        return {
          a_said: ''
        }
      },
      mounted: function () {
        var This = this;
        Event.$on('a-say-something', function (data) {
          This.a_said = data;
        })
      }
    });
  • 相关阅读:
    qmake Manual (EN) 1
    {转}linux gcc gdb使用
    qmake 简介
    {转}linux makefile 详细教程
    {转}Linux下C开发之——gcc,gdb的使用
    关于“做一个聊天+信息分享客户端”的设想(SNS?)
    {转}算法的力量
    hdu 2047 简单递推公式
    RONOJ 6 金明的预算方案
    hdu 2446 二分搜索解题报告
  • 原文地址:https://www.cnblogs.com/threeron/p/7520035.html
Copyright © 2011-2022 走看看