zoukankan      html  css  js  c++  java
  • Vue组件之间的传值

    要求:将输入框的内容显示在列表框,并点击列表删除

    一、父向子传值:props:[]

    二、子向父传值:this.$emit()

    //父组件
    <div id='root'>
           <input v-model="inputValue"/>
          <button @click='handleSubmit'>提交</button>//点击按钮将输入框内容作为li显示
      <ul>
        <todo-item 
          v-for='(item,index) of list'
          :content='item'//将item作为属性传递给子组件todo-item 
          :index='index'//将index作为属性传递给子组件todo-item 
          @delete='handleDelete'//监听子组件传递过来的delete事件名
        >
        </todo-item>
      </ul>
    </div>
    <script>
    //子组件
    Vue.component('todo-item',{ 
      props:['content','index'],//接收传递过来的属性
      template:'<li @click="handleClick">{{content}}</li>',
      methods:{
        handleClick:function(){
          this.$emit('delete',this.index)//将delete事件名及index属性传递给父组件
      }
      }
    })
    
    new Vue({
      el:'#root',
      data:{
      inputValue:'',
      list:[]
      },
      methods:{
        handleSubmit:function(){
          this.list.push(this.inputValue)
          this.inputValue=''//清空输入框
        },
        handleDelete:function(index){
        this.list.splice(index,1);
        }
      }
    })
    </script>

    三、兄弟间传值

    (1)Vuex状态管理工具

     状态管理可以理解为数据管理。集中存储:Vue只关心视图,所以我们需要一个仓库(store)来存储数据。

    应用场景:处理多个组件依赖同一个数据。

         一个组件的行为改变数据,同时会影响另一个组件的视图。

    vuex介绍:

    (1)为vue.js开发的状态管理模式

    (2)组件状态集中管理

    (3)组件状态改变遵循统一的规则

    由于vuex的状态存储是响应式的,所以从store实例中读取状态的最简单方法就是在计算属性中返回某个状态。

    Vuex 并不限制你的代码结构。但是,它规定了一些需要遵守的规则:

    • 应用层级的状态应该集中到单个 store 对象中。

    • 提交 mutation 是更改状态的唯一方法,并且这个过程是同步的。

    • 异步逻辑都应该封装到 action 里面。

    更改 Vuex 的 store 中的状态的唯一方法是提交 mutation。所以 mutations 上存放的一般就是我们要改变 state 的一些方法。

    mutations与actions的区别:mutations直接变更状态,而actions提交的mutations

    例子:

     

    创建store对象

    在组件1中使用:

    在组件2中使用:

    (2)使用EventBus解决

     在vue中可以使用EventBus来作为沟通桥梁,就像是所有组件共用相同的事件中心。可以向该中心注册发送事件或接收事件,所以组件都可以上下平行地通知其他组件。

     如何使用EventBus:

    • 初始化,创建一个空Vue对象并导出

    •  $emit发送事件

    •  $on接收事件

     

  • 相关阅读:
    SpringBoot接收前端参数的三种方法
    拉姆达表达式入门
    Can not issue data manipulation statements with executeQuery()错误解决
    executing an update/delete query问题
    syntax error, error in :'e id=1?', expect QUES, actual QUES pos 66, line 1, column 66, token QUES错误
    SpringDataJpa错误
    No identifier specified for entity: XXXX 错误
    An entity cannot be annotated with both @Entity and @MappedSuperclass: com.example1.demo1.Entity.User错误
    org.hibernate.AnnotationException: No identifier specified for entity: com.example1.demo1.Entity.User错误
    base64转图片
  • 原文地址:https://www.cnblogs.com/xiaoan0705/p/9394858.html
Copyright © 2011-2022 走看看