zoukankan      html  css  js  c++  java
  • 函数在vue组件间的交互

    假设在App.vue组件中定义一个addComment函数,而在Add.vue组件中会去调用这个addComment函数

    App.vue

    <template>
      <div>
        <header class="site-header jumbotron">
          <div class="container">
            <div class="row">
              <div class="col-xs-12">
                <h1>请发表对Vue的评论</h1>
              </div>
            </div>
          </div>
        </header>
        <div class="container">
    
    
        </div>
    
        <!--将addComment方法传到Add组件-->
        <Add :addComment="addComment"/>
        <!--通过下面这种方式就是comments内容传递到了List组件中,记得冒号,如果没有冒号,传递的就是comments这个文本内容-->
        <List :comments="comments"/>
    
      </div>
    </template>
    
    
    <script>
      import Add from './components/Add.vue'
      import List from './components/List.vue'
      export default{
    //    在App组件中初始化数据,而数据展示是在List组件中,这就涉及到了组件间的通信
        data(){  // 数据在哪个组件,其相关的行为就应该在那个组件
          return {
            comments: [{
              name: 'Bob',
              content: 'Vue 还不错'
            }, {
              name: 'Cat',
              content: 'Vue so Easy'
            }, {
              name: 'BZ',
              content: 'Vue so so'
            }
            ]
          }
        },
        methods: {
          // 添加评论
          // 定义一个函数
          addComment (comment){
            this.comments.unshift(comment)
          }
        },
        components: {
          Add, List
        }
    
      }
    </script>
    
    
    <style>
    
    </style>

    Add.vue

    <template>
      <div class="col-md-4">
        <form class="form-horizontal">
          <div class="form-group">
            <label>用户名</label>
            <input type="text" class="form-control" placeholder="用户名" v-model="name">
          </div>
          <div class="form-group">
            <label>评论内容</label>
            <textarea class="form-control" rows="6" placeholder="评论内容" v-model="content"></textarea>
          </div>
          <div class="form-group">
            <div class="col-sm-offset-2 col-sm-10">
              <button type="button" class="btn btn-default pull-right" @click="add">提交</button>
            </div>
          </div>
        </form>
      </div>
    </template>
    
    
    <script>
      export default{
        data(){
          return {
            name: '',
            content: ''
          }
        },
        methods: {
          add(){
            //1. 可以检测输入的合法性
            const name = this.name.trim();
            const content = this.content.trim();
            if (!name || !content) {
              alert('姓名或者内容不能为空!');
              return
            }
            //2.根据输入的数据,封装成一个comment对象
            const comment = {
              name, content
            }
            //3.添加到comments中
            this.addComment(comment)
            //4.清除数据
            this.name = '';
            this.content = '';
          }
        }
        ,
        props:{
          addComment: {// 指定了属性名,属性值的类型,和必要性
            type:Function,
            required: true
          }
        }
      }
    </script>
    
    
    <style>
    
    </style>

    函数同数据一样,都是在定义函数的组件中通过冒号名称进行传递,然后在调用方使用props属性进行声明、接收

  • 相关阅读:
    计算机原理 发展简史
    计算机原理 系统构成
    网络工程师级考试大纲
    软件工程师能力要求
    数据库主体在该数据库中拥有架构,无法删除解决方法
    【转】时时间已到。超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小。
    Rabbit mq订阅方式获取消息并可设置持久化
    OpenGL 核心技术之立方体贴图
    ArcGIS Engine问答:为什么地理数据库中不能产生同名要素类
    Cocos2d-X中的声音和音效
  • 原文地址:https://www.cnblogs.com/z-qinfeng/p/12383813.html
Copyright © 2011-2022 走看看