Vue.js组件学习

组件可以扩展HTML元素,封装可重用的HTML代码,我们可以将组件看作自定义的HTML元素。组件系统提供了一种抽象,让我们可以使用独立可复用的小组件来构建大型应用。

一个简单组件例子(全局注册)

<!DOCTYPE html>
<html>
    <body>
        <div id="app">
            <!-- 3. #app是Vue实例挂载的元素,应该在挂载元素范围内使用组件-->
            <the-component></the-component>
        </div>
    </body>
    <script src="js/vue.js"></script>
    <script>

        // 1.创建一个组件构造器
        var myComponent = Vue.extend({
            template: ‘<div> my first component!</div>‘
        })

        // 2.注册组件,并指定组件的标签,组件的HTML标签为<the-component>
        Vue.component(‘the-component‘, myComponent)

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

    </script>
</html>

运行结果:

分析:

1.Vue.extent() 是Vue构造器的扩展,调用Vue.extend()创建的是一个组件构造器,而不是一个具体的组件实例。它里面的选项对象的template属性用于定义组件要渲染的HTML。

2.Vue.component() 注册组件时,需要提供2个参数,第一个参数是组件的标签,第二个是组件构造器。它调用了组件构造器myComponent,创建一个组件实例。

3.组件应该挂载在某个Vue实例下,

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

这段代码必须要有,表示挂载在#app元素上,否则不会生效。

局部注册:

  <script>

        // 1.创建一个组件构造器
        var myComponent = Vue.extend({
            template: ‘<div> my first2 component!</div>‘
        })

        new Vue({
            el: ‘#app‘,
            components: {
                // 2. 将myComponent组件注册到Vue实例下
                ‘the-component‘ : myComponent
            }
        });

    </script>

父组件和子组件

可以在组件中定义并使用其他组件,构成父子组件关系。

例子:(注意版本用vue.js 1.0的,2.0版本,button都出现不了)

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
  </head>
  <body>
    <!-- 子组件模板 -->
    <template id="child-template">
      <input v-model="msg">
      <button v-on:click="notify">Dispatch Event</button>
    </template>

    <!-- 父组件模板 -->
    <div id="events-example">
      <p>Messages: {{ messages | json }}</p>
      <child></child>
    </div>
  </body>
  <script src="http://cdn.bootcss.com/vue/1.0.0-csp/vue.js"></script>
  <script>
  // 注册子组件
  // 将当前消息派发出去
  Vue.component(‘child‘, {
    template: ‘#child-template‘,
    data: function () {
      return { msg: ‘hello‘ }
    },
    methods: {
      notify: function () {
        if (this.msg.trim()) {
          this.$dispatch(‘child-msg‘, this.msg)
          this.msg = ‘‘
        }
      }
    }
  })

  // 初始化父组件
  // 将收到消息时将事件推入一个数组
  var parent = new Vue({
    el: ‘#events-example‘,
    data: {
      messages: []
    },
    // 在创建实例时 `events` 选项简单地调用 `$on`
    events: {
      ‘child-msg‘: function (msg) {
        // 事件回调内的 `this` 自动绑定到注册它的实例上
        this.messages.push(msg)
      }
    }
  })

  </script>
</html>

运行结果:

props示例

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
  </head>
  <body>
    <template id="myComponent">
      <table>
          <tr>
              <th colspan="2">
                  子组件数据
              </th>
          </tr>
          <tr>
              <td>myname</td>
              <td v-text="myName"></td>
          </tr>
          <tr>
              <td>myage</td>
              <td v-text="myAge"></td>
          </tr>
      </table>
    </template>
    <div id="app">
      <my-component v-bind:my-name="name" v-bind:my-age="age"></my-component>
    </div>
  </body>
  <script src="http://cdn.bootcss.com/vue/1.0.0-csp/vue.js"></script>
  <script>
  var vm = new Vue({
    el: ‘#app‘,
    data: {
        name: ‘wangjuan‘,
        age: 24
    },
    components: {
        ‘my-component‘: {
            template: ‘#myComponent‘,
            props: [‘myName‘, ‘myAge‘]
        }
    }
  });
  </script>
</html>

结果为:

prop双向绑定

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
  </head>
  <body>
    <template id="myComponent">
      <table>
          <tr>
              <th colspan="3">
                  子组件数据
              </th>
          </tr>
          <tr>
              <td>myname:</td>
              <td v-text="myName"></td>
              <td><input type="text" v-model="myName" /></td>
          </tr>
          <tr>
              <td>myage:</td>
              <td v-text="myAge"></td>
              <td><input type="text" v-model="myAge" /></td>
          </tr>
      </table>
    </template>
    <div id="app">
    <table>
        <tr>
            <th colspan="3">父组件数据</th>
        </tr>
        <tr>
            <td>name:</td>
            <td>{{ name }}</td>
            <td><input type="text" v-model="name" /></td>
        </tr>
        <tr>
            <td>age:</td>
            <td>{{ age }}</td>
            <td><input type="text" v-model="age" /></td>
        </tr>
    </table>

      <my-component v-bind:my-name="name" v-bind:my-age="age"></my-component>
    </div>
  </body>
  <script src="http://cdn.bootcss.com/vue/2.0.0-rc.8/vue.js"></script>
  <script>
  var vm = new Vue({
    el: ‘#app‘,
    data: {
        name: ‘wangjuan‘,
        age: 24
    },
    components: {
        ‘my-component‘: {
            template: ‘#myComponent‘,
            props: [‘myName‘, ‘myAge‘]
        }
    }
  });
  </script>
</html>

结果:

prop默认是单向绑定,不过这里我感觉默认是双向绑定,不知道哪里出问题了。。。

使用.sync或.once 绑定修饰符显式地强制双向或单次绑定。

子组件可以用this.$parent访问它的父组件。根实例的后代可以用this.$root访问它。父组件有一个数组this.$children,包含它所有的子元素。

时间: 2024-12-21 17:03:04

Vue.js组件学习的相关文章

vue.js 组件之间如何实现数据传递?

组件是 vue.js  最强大的功能之一,而组件实例的作用域是相互独立的,这就意味着不同组件之间的数据无法相互引用.如何传递数据也成了组件的重要知识点之一.本文和大家分享的就是vue.js  组件之间传递数据相关内容,一起来看看吧,希望对大家 学习vue.js有所帮助. 组件 组件与组件之间,还存在着不同的关系.父子关系与兄弟关系(不是父子的都暂称为兄弟吧). 父子组件 父子关系即是组件 A  在它的模板中使用了组件  B ,那么组件  A  就是父组件,组件  B  就是子组件. //  注册

vue.js的学习总结

一.vue.js的简介 vue.js是一套用于构建用户界面的渐进式框架.具体简介参考官方介绍,https://cn.vuejs.org/v2/guide/. 二.使用vue.js的学习总结 1.v-model在表单控件或者组件上创建双向绑定.随表单控件类型不同而不同.但是除表单以外就不能使用双向绑定,比如说表格中的标签不能使用v-model进行双向绑定,只能让数据从后台到前台单向的传输,展示用双花括号. 2.创建vue对象后自定义的方法需要写在methods中,方法中支持$.get()和$.aj

Vue.js 基础学习

今天我开始了Vue.js 的学习. 那么什么是Vue.js 呢? Vue.js是一套开发Web页面的JavaScript脚本框架.听起来感觉很难,不过据说,Vue.js是Web-Javascript脚本框架中最容易上手的框架.所以我便选择了先来学习这个. 要学习Vue.js首先就要获取库文件了,在网上有很多地方可以找到,我是在bootcdn上找到的 接下来我们通过Vue输出一串Hello World ! 首先引入vue. <script src="https://cdn.bootcss.c

如何理解vue.js组件的作用域是独立的

vue.js组件的作用域是独立,可以从以下三个方面理解: 1.父组件模板在父组件作用域内编译,父组件模板的数据用父组件内data数据:2.子组件模板在子组件作用域内编译,子组件模板的数据用子组件内data数据,如果要用父组件的必须用props传递:3.子组件标签的数据,使用父组件内的data数据 案例代码: <div id="demo"> <my-component v-if="show" v-bind:my-message="messa

如何对第一个Vue.js组件进行单元测试 (上)

首先,为什么要单元测试组件? 单元测试是持续集成的关键.通过专注于小的.独立的实体,确保单元测试始终按预期运行,使代码更加可靠,你可以放心地迭代你的项目而不必担坏事儿. 单元测试不仅限于脚本.可以独立测试的任何东西都是可单元测试的,只要你遵循一些好的做法.这些实例包括单一责任.可预测性和松散耦合. 作为我们应用程序的可重用实体,Vue.js组件是单元测试的理想选择.我们将用不同的输入和交互测试做好的单个单元,并确保它始终按照我们的预期运行. 在开始之前 Vue CLI 3发布了.Vue Test

Vue.js 组件精讲

课程介绍:你会学到什么        了解 Vue.js 组件开发的精华        Vue.js 组件知识全覆盖        掌握多种 Vue.js 组件开发的模式        独立组件不依赖 Vuex 和 Bus 情况下,各种跨级通信手段(provide / inject.broadcast / dispatch.findComponents 系列)        7 个完整的 Vue.js 组件示例        如何做好一个开源项目        Vue.js 容易忽略的 API

Vue.js 基础学习之组件

什么是组件:组件是Vue.js最强大的功能之一.组件可以扩展HTML元素,封装可重用的代码.在较高层面上,组件是自定义的元素,Vue.js的编译器为它添加特殊功能.在有些情况下,组件也可以是原生HTML元素的形式,以is特性扩展. 创建全局组件 <div id="seg1"> <alert></alert> </div> <div id="seg2"> <alert></alert>

vue.js 组件之间传递数据

组件是 vue.js  最强大的功能之一,而组件实例的作用域是相互独立的,这就意味着不同组件之间的数据无法相互引用.如何传递数据也成了组件的重要知识点之一.本文就这个知识点和大家一起来扒一扒,希望对大家 学习vue.js有所帮助. 组件 组件与组件之间,还存在着不同的关系.父子关系与兄弟关系(不是父子的都暂称为兄弟吧). 父子组件 父子关系即是组件 A  在它的模板中使用了组件  B ,那么组件  A  就是父组件,组件  B  就是子组件. //  注册一个子组件 Vue.component(

vue.js的学习

首先Vue.js是一个组件 他依赖于nodejs环境和npm   所以我们要先安装nodejs  npm也是依赖于nodejs的 对于nodejs呢   它有不同的版本   奇数版本不稳定  所以采用偶数版本   而我学习的是慕课网   它所用的是10版本  并且我们知道  版本必须是和api相匹配的 接下来呢我们就要按照nodejs'的安装先进行了  首先进入nodejs的官网下载  根据位数下载  我下载的是64位的  然后安装  安装时如果是自己的电脑建议直接用默认路径就是C盘   因为方