当前位置:   article > 正文

Vue2 props组件通信-父子组件传值

Vue2 props组件通信-父子组件传值

一、父组件向子组件传值

1、流程图

2、父组件代码

  1. <template>
  2. <div class="app">
  3. <UserInfo
  4. :username='username'
  5. :age='age'
  6. :isSingle='isSingle'
  7. :car='car'
  8. :hobby='hobby'
  9. ></UserInfo>
  10. </div>
  11. </template>
  12. <script>
  13. import UserInfo from './components/UserInfo.vue'
  14. export default {
  15. data() {
  16. return {
  17. username: '小帅',
  18. age: 28,
  19. isSingle: true,
  20. car: {
  21. brand: '宝马',
  22. },
  23. hobby: ['篮球', '足球', '羽毛球'],
  24. }
  25. },
  26. components: {
  27. UserInfo,
  28. },
  29. }
  30. </script>
  31. <style>
  32. </style>

3、子组件代码

  1. <template>
  2. <div class="userinfo">
  3. <h3>我是个人信息组件</h3>
  4. <div>姓名:{{username}}</div>
  5. <div>年龄:{{age}}</div>
  6. <div>是否单身:{{isSingle ? '是' : '否'}}</div>
  7. <div>座驾:{{car.brand}}</div>
  8. <div>兴趣爱好: {{hobby.join('、')}}</div>
  9. </div>
  10. </template>
  11. <script>
  12. export default {
  13. props:['username','age','isSingle','car','hobby']
  14. }
  15. </script>
  16. <style>
  17. .userinfo {
  18. width: 300px;
  19. border: 3px solid #000;
  20. padding: 20px;
  21. }
  22. .userinfo > div {
  23. margin: 20px 10px;
  24. }
  25. </style>

二、子组件向父组件传值

1、流程图

原图下载:https://download.csdn.net/download/weixin_47401101/88787757

2、父组件代码 App.vue

  1. <template>
  2. <!-- 主体区域 -->
  3. <section id="app">
  4. <ToDoHeader v-on:add='handleAdd'></ToDoHeader>
  5. <ToDoMain :list='list'></ToDoMain>
  6. <ToDoFooter></ToDoFooter>
  7. </section>
  8. </template>
  9. <script>
  10. import ToDoFooter from './components/ToDoFooter.vue'
  11. import ToDoHeader from './components/ToDoHeader.vue'
  12. import ToDoMain from './components/ToDoMain.vue'
  13. // 数据要通过父组件提供
  14. export default {
  15. data () {
  16. return {
  17. list:[
  18. {id:1,name:'打篮球'},
  19. {id:2,name:'看电影'},
  20. {id:3,name:'逛街'}
  21. ]
  22. }
  23. },
  24. methods:{
  25. handleAdd(todoName){
  26. // 数据这样就传过来了
  27. this.list.unshift({
  28. id:+new Date(),
  29. name:todoName
  30. })
  31. }
  32. },
  33. components:{
  34. ToDoHeader,
  35. ToDoMain,
  36. ToDoFooter,
  37. }
  38. }
  39. </script>
  40. <style>
  41. </style>

3、子组件代码 

ToDoHeader.vue

  1. <template>
  2. <!-- 输入框 -->
  3. <header class="header">
  4. <h1>小黑记事本</h1>
  5. <input
  6. v-model='todoName'
  7. v-on:keyup.enter='handleAdd'
  8. placeholder="请输入任务" class="new-todo" />
  9. <button
  10. v-on:click='handleAdd'
  11. class="add">添加任务</button>
  12. </header>
  13. </template>
  14. <script>
  15. export default {
  16. data(){
  17. return{
  18. todoName:''
  19. }
  20. },
  21. methods:{
  22. handleAdd(){
  23. //子组件向父组件传值
  24. if(this.todoName.trim()===''){
  25. alert('任务名称不能为空!')
  26. return
  27. }
  28. this.$emit('add',this.todoName)
  29. this.todoName=''
  30. }
  31. }
  32. }
  33. </script>
  34. <style>
  35. </style>

ToDoMain.vue

  1. <template>
  2. <!-- 列表区域 -->
  3. <section class="main">
  4. <ul class="todo-list">
  5. <li class="todo" v-for='(item,index) in list' :key='item.id'>
  6. <div class="view">
  7. <span class="index">{{index + 1}}.</span> <label>{{item.name}}</label>
  8. <button class="destroy"></button>
  9. </div>
  10. </li>
  11. </ul>
  12. </section>
  13. </template>
  14. <script>
  15. export default {
  16. props:{
  17. list:Array,
  18. }
  19. }
  20. </script>
  21. <style>
  22. </style>

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/43192
推荐阅读
相关标签
  

闽ICP备14008679号