美文网首页
vue语法基础二-组件

vue语法基础二-组件

作者: 栗子daisy | 来源:发表于2019-12-02 10:11 被阅读0次

组件

Vue组件 说明 注册 使用
全局组件 所有实例都能用全局组件。 Vue.component(tagName, options) <tagName></tagName>
局部组件 在实例选项中注册局部组件 var Child = {template: '<h1>自定义组件!</h1>'} ' music-list ': Child //music-list只在父模板可用
1.全局组件
  • 注册一个全局组件语法格式如下:Vue.component(tagName, options)
  • tagName 为组件名,options 为配置选项。注册后,我们可以使用以下方式来调用组件:<tagName></tagName>
<div id="app">
  <runoob></runoob>
</div>
<script>
// 注册
Vue.component('runoob', {
  template: '<h1>自定义组件!</h1>'
})
// 创建根实例
new Vue({
  el: '#app'
})
</script>
2.局部组件
<div id="app">
  <runoob></runoob>
</div>
<script>
var Child = {
  template: '<h1>自定义组件!</h1>'
}
// 创建根实例
new Vue({
  el: '#app',
  components: {
    // <runoob> 将只在父模板可用
    'runoob': Child
  }
})
</script>
父子组件通信 操作
父组件传给子组件 Prop传递自定义属性
子组件传给父组件 自定义事件

父传子---Prop

prop 是父组件用来传递数据的一个自定义属性。

//1.父组件的数据需要通过 props 把数据传给子组件
<child message="hello!"></child>
//2. 动态 Prop, parentMsga是父组件的数据变量
<child v-bind:message="parentMsg"></child>

Vue.component('child', {
  // 子组件需要显式地用 props 选项声明 "prop"
  props: ['message'],
  // 同样也可以在 vm 实例中像 "this.message" 这样使用
  template: '<span>{{ message }}</span>'
})
// 创建根实例
new Vue({
  el: '#app',
  data: {
    parentMsg: '父组件内容',
  }
})
//子组件
<template>
  <li>{{ todo.text }}</li>
</template>

<script>
export default {
  name: "Todo",
 props: ['todo'],
};
</script>
//父组件
<template>
  <div id="app">
    <ul><Todo v-for="item in sites" v-bind:todo="item" v-bind:key="item.text"></Todo></ul>
  </div>
</template>

<script>
import Todo from "./components/Todo.vue";
export default {
  name: "app",
  data() {
    return {
      sites: [{ text: "Runoob" }, { text: "Google" }, { text: "Taobao" }]
    };
  },
  components: {Todo}
};
</script>

父组件是使用 props 传递数据给子组件,但如果子组件要把数据传递回去,就需要使用自定义事件!

子传父---自定义事件

我们可以使用 v-on 绑定自定义事件, 每个 Vue 实例都实现了事件接口(Events interface),即:
使用 $on(eventName) 监听事件
使用 $emit(eventName) 触发事件

//子组件 ButtonCounter.vue
<template>
  <button v-on:click="incrementHandler">{{ counter }}</button>
</template>

<script>
export default {
  name: "button-counter",
 data: function () {
    return {
      counter: 0
    }
  },
  methods: {
    incrementHandler: function () {
      this.counter += 1
      this.$emit('increment')
    }
  },
};
</script>

另外,父组件可以在使用子组件的地方直接用 v-on 来监听子组件触发的事件。v-on:increment

//父组件
<template>
  <div id="app">
     <p>{{ total }}</p>
    <button-counter v-on:increment="incrementTotal"></button-counter>
    <button-counter v-on:increment="incrementTotal"></button-counter>
  </div>
</template>

<script>
import ButtonCounter from "./components/ButtonCounter.vue";
export default {
  name: "app",
  data() {
    return {
       total: 0,
    };
  },
  components: {
  "button-counter":ButtonCounter,
  },
  methods: {
    incrementTotal: function () {
      this.total += 1
    }
  }
};
</script>

相关文章

  • vue语法基础二-组件

    组件 Vue组件说明注册使用全局组件所有实例都能用全局组件。Vue.component(tagName, opti...

  • 【Vue3 从入门到实战 进阶式掌握完整知识体系】002-Vue

    二、Vue语法基础 1、Vue中的应用和组件的基本部分 代码 运行结果 2、理解Vue的生命周期函数* 生命周期图...

  • vue基础语法

    vue常用基础语法: 一、模板语法 1.vue使用基于html的模板语法,智能计算出最少需呀重复渲染的组件;2.数...

  • Python 高端课程培训,CMDB自动化运维培训!

    1、入门小基础(8个课时): 1、沙盒环境,py环境安装使用 2、vue 基础语法与组件学习 3、vue + el...

  • 框架部分

    Vue 环境搭建、配置路由 基础指令(选项数据、模板语法) 计算属性、方法、侦听器 组件 组件传值(父子组件、兄弟...

  • (24)打鸡儿教你Vue.js

    学习Vue基础语法Vue中的组件Vue-cli的使用 1、使用Vue2.0版本实现响应式编程2、理解Vue编程理念...

  • vue jsx写法记录

    [toc] 通过本文, 你可以学到一些vue中jsx的语法。 vue更加推荐使用模板开发组件,但是在一些基础组件开...

  • Vue的状态管理「Vuex」

    前言   本文假设读者已经了解vue的基础语法,能够使用vue编写出简单的页面 Vue 组件间的通信 为了更全面认...

  • 组件 model 属性简介

    v-model语法糖: model.vue 组件代码(子组件): 组件使用(父组件) app.vue

  • Vue动态组件 component 以及缓存

    本文写给对Vue组件了解的基础上,如果你不明白什么是Vue的组件,可以去官网看看Vue组件基础。在Vue中有一个 ...

网友评论

      本文标题:vue语法基础二-组件

      本文链接:https://www.haomeiwen.com/subject/cnmbictx.html