vue2技能树(9)-prop属性,自定义事件


👍 点赞,你的认可是我创作的动力!

⭐️ 收藏,你的青睐是我努力的方向!

✏️ 评论,你的意见是我进步的财富!


Vue 2 中的 Prop 详解

在Vue.js 2中,Props(属性) 是一种允许父组件向子组件传递数据的机制,它是Vue组件之间通信的重要方式之一。以下是对Vue 2中Props的多方面详细介绍,包括使用详细的项目示例。

基本用法

在Vue组件中,通过在子组件的模板中声明props 来定义接受的属性,然后可以在父组件中通过自定义属性的方式将数据传递给子组件。

项目示例

假设你有一个UserCard 子组件,用于显示用户的名字。

<div id="app">
  <user-card username="John Doe"></user-card>
</div>
Vue.component('UserCard', {
  props: ['username'], // 声明props
  template: `<div>{{ username }}</div>`
});

new Vue({
  el: '#app'
});

在这个示例中,UserCard 子组件通过props: ['username'] 声明了一个名为username 的属性。然后,父组件可以通过username 自定义属性将数据传递给子组件。

动态Props

你可以使用动态的数据来传递props,这样子组件可以接受来自父组件的动态数据。

项目示例

假设你有一个父组件,通过v-bind 动态地将数据传递给子组件。

<div id="app">
  <user-card :username="dynamicUsername"></user-card>
</div>
Vue.component('UserCard', {
  props: ['username'],
  template: `<div>{{ username }}</div>`
});

new Vue({
  el: '#app',
  data: {
    dynamicUsername: 'Jane Smith'
  }
});

在这个示例中,父组件通过:username="dynamicUsername" 动态地将dynamicUsername 数据传递给子组件。

Prop 验证

Vue 2还支持对props 进行验证,确保传递给子组件的数据符合预期。

项目示例

假设你有一个Post 子组件,接受一个title 属性,并希望确保它是字符串类型。

<div id="app">
  <post :title="123"></post>
</div>
Vue.component('Post', {
  props: {
    title: {
      type: String, // 类型验证
      required: true // 必需属性
    }
  },
  template: `<div>{{ title }}</div>`
});

new Vue({
  el: '#app'
});

在这个示例中,Post 子组件通过props 的验证选项确保title 是一个必需的字符串类型属性。如果传递的数据不符合验证规则,Vue会在控制台中发出警告。

单向数据流

在Vue中,props 遵循单向数据流的原则,父组件传递数据给子组件后,子组件不应该修改这些数据。如果需要从子组件向父组件传递数据,你应该使用自定义事件。

项目示例

假设你有一个Counter 子组件,用于显示计数器值,但不允许子组件直接修改父组件传递的计数值。

<div id="app">
  <counter :count="count" @increment="incrementCount"></counter>
</div>
Vue.component('Counter', {
  props: ['count'],
  template: `
    <div>
      <button @click="increment">+1</button>
      <span>计数:{{ count }}</span>
    </div>
  `,
  methods: {
    increment() {
      this.$emit('increment'); // 触发自定义事件
    }
  }
});

new Vue({
  el: '#app',
  data: {
    count: 0
  },
  methods: {
    incrementCount() {
      this.count++;
    }
  }
});

在这个示例中,Counter 子组件通过$emit 触发increment 自定义事件,来请求父组件增加计数值。这遵循了单向数据流的原则。

Props 是Vue.js中一个非常重要的概念,用于在组件之间传递数据。你可以通过定义props来声明子组件所需的数据,实现组件之间的通信。 Props 的动态绑定和验证功能使得数据传递更加灵活和可靠。但记住,遵循单向数据流的原则,确保props只用于父到子的数据传递。

Vue 2 自定义事件详解

自定义事件是Vue.js 2中的一个关键概念,它允许你在组件之间进行通信,使得父组件和子组件能够互相传递数据和触发行为。以下是对Vue 2中自定义事件的多方面详细介绍,包括使用详细的项目示例。

自定义事件的基本使用

在Vue组件中,你可以使用$emit 方法来触发自定义事件,并在父组件中通过v-on 来监听和处理这些事件。

项目示例

假设你有一个Button 子组件,点击按钮后触发自定义事件,父组件监听并处理这个事件。

<div id="app">
  <button @custom-click="handleCustomClick">点击我</button>
</div>
Vue.component('Button', {
  template: `<button @click="emitCustomClick">点击我</button>`,
  methods: {
    emitCustomClick() {
      this.$emit('custom-click'); // 触发自定义事件
    }
  }
});

new Vue({
  el: '#app',
  methods: {
    handleCustomClick() {
      alert('自定义事件被触发了!');
    }
  }
});

在这个示例中,Button 子组件使用this.$emit('custom-click') 来触发custom-click 自定义事件,父组件使用@custom-click 来监听并处理这个事件。

传递数据

自定义事件不仅可以触发行为,还可以传递数据给父组件。你可以在$emit 方法的第二个参数中传递数据。

项目示例

假设你有一个Counter 子组件,点击按钮后触发自定义事件,传递计数值给父组件。

<div id="app">
  <counter @custom-increment="handleCustomIncrement"></counter>
  <p>计数:{{ count }}</p>
</div>
Vue.component('Counter', {
  data() {
    return {
      count: 0
    };
  },
  template: `
    <div>
      <button @click="increment">+1</button>
    </div>
  `,
  methods: {
    increment() {
      this.count++;
      this.$emit('custom-increment', this.count); // 传递计数值
    }
  }
});

new Vue({
  el: '#app',
  data: {
    count: 0
  },
  methods: {
    handleCustomIncrement(count) {
      alert(`计数增加到 ${count}`);
      this.count = count;
    }
  }
});

在这个示例中,Counter 子组件通过this.$emit('custom-increment', this.count) 来触发custom-increment 自定义事件,并传递计数值给父组件。

命名自定义事件

除了直接使用字符串作为事件名,你还可以使用命名自定义事件来更好地组织和管理事件。

项目示例

假设你有一个Product 子组件,点击按钮后触发一个命名自定义事件。

<div id="app">
  <product @add-to-cart="handleAddToCart"></product>
  <p>购物车中有 {{ cartItems }} 件商品</p>
</div>
Vue.component('Product', {
  template: `<button @click="addToCart">添加到购物车</button>`,
  methods: {
    addToCart() {
      this.$emit('add-to-cart'); // 触发命名自定义事件
    }
  }
});

new Vue({
  el: '#app',
  data: {
    cartItems: 0
  },
  methods: {
    handleAddToCart() {
      this.cartItems++;
    }
  }
});

在这个示例中,Product 子组件使用this.$emit('add-to-cart') 来触发add-to-cart 命名自定义事件。

自定义事件是Vue.js中非常强大的功能,它使得组件之间可以互相传递数据和触发行为,使得组件更具交互性和可重用性。无论是基本的自定义事件、传递数据还是命名自定义事件,都可以满足不同的需求,帮助你构建丰富的交互式应用。

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在2中,父组件向子组件传递参数可以使用Vue提供的prop属性。在父组件中定义子组件的标签时,使用冒号加上子组件中定义的props属性名,并将要传递的值作为属性值传递给子组件。子组件中可以通过props接收父组件传递的值,并在子组件的模板中使用。这样就实现了父子组件之间的参数传递。 在上述例子中,父组件通过定义sonInfo属性并将其传递给子组件son来实现传参。在子组件son中,可以使用props来接收父组件传递的sonInfo属性,并在模板中使用。父组件通过sonInfo传递了一个对象,子组件可以通过props接收并在模板中展示sonName和sonAge的值。 需要注意的是,父组件传递参数给子组件时,可以使用v-bind指令将一个动态的值绑定到子组件的属性上,也可以直接将一个静态的值传递给子组件的属性。另外,要注意在子组件中声明props时,需要指定每个prop的类型和是否必需。这样可以提高程序的可读性和可维护性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Vue2-父子组件传值](https://blog.csdn.net/h13245/article/details/126822453)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值