05-Vue组件

定义Vue组件

什么是组件: 组件的出现,就是为了拆分Vue实例的代码量的,能够让我们以不同的组件,来划分不同的功能模块,将来我们需要什么样的功能,就可以去调用对应的组件即可; 组件化和模块化的不同:

  • 模块化: 是从代码逻辑的角度进行划分的;方便代码分层开发,保证每个功能模块的职能单一;
  • 组件化: 是从UI界面的角度进行划分的;前端的组件化,方便UI组件的重用;

 -全局组件定义的三种方式

  1. 使用 Vue.extend 配合 Vue.component 方法:
var login = Vue.extend({
      template: '

登录

' }); Vue.component('login', login);
  1. 直接使用 Vue.component 方法:
Vue.component('register', {
      template: '

注册

' });
  1. 将模板字符串,定义到script标签种:

同时,需要使用 Vue.component 来定义组件:

Vue.component('account', {
      template: '#tmpl'
});

注意: 组件中的DOM结构,有且只能有唯一的根元素(Root Element)来进行包裹!

 

 

 -组件中展示数据和响应事件(通过计数器案例演示)

  1. 在组件中,data需要被定义为一个方法,例如:
Vue.component('account', {
      template: '#tmpl',
      data() {
        return {
          msg: '大家好!'
        }
      },
      methods:{
        login(){
          alert('点击了登录按钮');
        }
      }
}); 
  1. 在子组件中,如果将模板字符串,定义到了script标签中,那么,要访问子组件身上的data属性中的值,需要使用this来访问;

 

 

 -使用components属性定义局部子组件

  1. 组件实例定义方式:
  1. 引用组件:
<div id="app">
    <account>account>
div>

  

 

使用flag标识符结合v-ifv-else切换组件

  1. 页面结构:
<div id="app">
    <input type="button" value="toggle" @click="flag=!flag">
    <my-com1 v-if="flag">my-com1>
    <my-com2 v-else="flag">my-com2>
div>
  1. Vue实例定义:

 

 

使用:is属性来切换不同的子组件,并添加切换动画

  1. 组件实例定义方式:
  // 登录组件
    const login = Vue.extend({
      template: `

登录组件

` }); Vue.component('login', login); // 注册组件 const register = Vue.extend({ template: `

注册组件

` }); Vue.component('register', register); // 创建 Vue 实例,得到 ViewModel var vm = new Vue({ el: '#app', data: { comName: 'login' }, methods: {} });
  1. 使用component标签,来引用组件,并通过:is属性来指定要加载的组件:
 <div id="app">
    <a href="#" @click.prevent="comName='login'">登录a>
    <a href="#" @click.prevent="comName='register'">注册a>
    <hr>
    <transition mode="out-in">
      <component :is="comName">component>
    transition>
  div>
  1. 添加切换样式:

 

 

 

父组件向子组件传值

  1. 组件实例定义方式,注意:一定要使用props属性来定义父组件传递过来的数据
  1. 使用v-bind或简化指令,将数据传递到子组件中:
<div id="app">
    <son :finfo="msg">son>
div>

 

 

子组件向父组件传值

  1. 原理:父组件将方法的引用,传递到子组件内部,子组件在内部调用父组件传递过来的方法,同时把要发送给父组件的数据,在调用方法的时候当作参数传递进去;
  2. 父组件将方法的引用传递给子组件,其中,getMsg是父组件中methods中定义的方法名称,func是子组件调用传递过来方法时候的方法名称
<son @func="getMsg">son>
  1. 子组件内部通过this.$emit('方法名', 要传递的数据)方式,来调用父组件中的方法,同时把数据传递给父组件使用

 

转载于:https://www.cnblogs.com/CGWTQ/p/11250309.html

你可能感兴趣的:(05-Vue组件)