• Vue.js(四)


    组件

    组件是可复用的 Vue 实例,且带有一个名字:在这个例子中是 <button-counter>。
    
    我们可以在一个通过 new Vue 创建的 Vue 根实例中,把这个组件作为自定义元素来使用。
    
    
    // 定义一个名为 button-counter 的新组件
    Vue.component('button-counter',{
      data: function () {	//一个组件的 data 选项必须是一个函数,因此每个实例可以维护一份被返回对象的独立的拷贝
        return {
          count: 0
        }
      },
      template: '<button v-on:click="count++">You clicked me {{ count }} times.</button>'
    });
    
    <div>
      <button-counter></button-counter>
    </div>
    

    通过 Prop 向子组件传递数据(传递组件数据)

    一个组件默认可以拥有任意数量的 prop,任何值都可以传递给任何 prop。
    我们能够在组件实例中访问这个值。
    
    
    Vue.component('blog-post',{
      props: ['title'],
      template: '<h3>{{ title }}</h3>'
    });
    
    <blog-post title="My journey with Vue"></blog-post>
    

    使用 v-bind 来动态传递 prop(传递 data 数据)

    new Vue({
      el: '#blog-post',
      data: {
        posts: [
          { id: 1, title: 'My journey with Vue' },
          { id: 2, title: 'Blogging with Vue' },
        ]
      }
    })
    
    <blog-post
      v-for="post in posts"
      v-bind:key="post.id"
      v-bind:title="post.title">	//如果不加v-bind,"post.title"会被当做字符串,而不是表达式
    </blog-post>
    
    
    重构:
    
    <blog-post
      v-for="post in posts"
      v-bind:key="post.id"
      v-bind:post="post">
    </blog-post>
    
    Vue.component('blog-post',{
      props: ['post'],
      template: `
        		<div>
          			<h3>{{ post.title }}</h3>
         			<div v-html="post.content"></div>
       			</div>
      			`
    });
    

    子组件向父组件传值

    new Vue({
      el: '#blog-post',
      data: {
        postFontSize: 1
      }
    });
    
    
    <blog-post v-on:enlarge-text="postFontSize += 0.1"></blog-post>
    
    
    Vue.component('blog-post',{
      props: ['post'],
      template: `
        <div class="blog-post">
          <h3>{{ post.title }}</h3>
          <button v-on:click="$emit('enlarge-text')"></button>
          <div v-html="post.content"></div>
        </div>
      `
    })
    
    
    父级组件会接收该事件并更新 postFontSize 的值。
    

    子组件向父组件传值-携带参数

       <menu-item :parr='parr' @enlarge-text='big($event)'></menu-item>
    
       Vue.component('menu-item',{
          props: ['parr'],
          template: `
            <div>
              <ul>
                <li :key='index' v-for='(item,index) in parr'>{{item}}</li>
              </ul>
              <button @click='$emit("enlarge-text", 5)'>扩大父组件中字体大小</button>
            </div>
          `
        });
    
        var vm = new Vue({
          el: '#app',
          data: {
            parr: ['apple','orange','banana'],
            fontSize: 10
          },
          methods: {
            big: function(val){
              // 扩大字体大小
              this.fontSize += val;
            }
          }
        });
    

    通过插槽分发内容

    <alert-box>
      Something bad happened.
    </alert-box>
    
    Vue.component('alert-box',{
      template: `
        <div>
          <strong>Error!</strong>
          <slot></slot>
        </div>
      `
    });
    
  • 相关阅读:
    这个博客的由来
    PLSQL Developer 不能连接 oracle 12c 64位 的解决办法 for win 64
    Netflix 是如何推荐电影的
    Hadoop中国技术峰会引发Hadoop 2.0风暴
    JS如何导出Div的内容为图片
    jquery如何获取标签本生的文本内容,不获取本身子级元素及子级元素的内容
    superagent抓取gb2312网页出来是十六进制的解决办法
    一些常见html css遇到的问题
    es6 三行代码数组去重
    es6中的 Set、Map 和 WeakMap
  • 原文地址:https://www.cnblogs.com/loveer/p/11852418.html
Copyright © 2020-2023  润新知