Vue.js学习笔记 第八篇 组件

全局注册组件

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
    <script src="https://unpkg.com/vue"></script>
</head>
<body>
    <div id="app-1">
        <global-component></global-component>
    </div>
    <script type="text/javascript">
        Vue.component(‘global-component‘, {
            template: ‘<div>一个自定义全局组件!</div>‘
        })
        var vm1 = new Vue({
            el: ‘#app-1‘
        })
    </script>
</body>
</html>

global-component是自定义标签名称,建议遵循W3C规则(全部小写,必须包含连字符(-))

全局注册组件的语法格式为Vue.component(tagName, options)

全局注册的组件要在Vue实例化之前注册完成

局部注册组件

<div id="app-1">
    <local-component></local-component>
</div>
<script type="text/javascript">
    var localComponent = {
        template: ‘<div>一个自定义局部组件!</div>‘
    }
    var vm1 = new Vue({
        el: ‘#app-1‘,
        // 局部注册的组件只能在父级模板中使用
        components: {
            ‘local-component‘: localComponent
        }
    })
</script>

Vue对象实例化时,第5个参数类型components(组件)

局部注册的组件是有作用域的,他只能在父级模板中使用,也就是el指定的标签内使用

使用Props属性传参

<div id="app-2">
    <input v-model="content" placeholder="这里输入组件参数">
    <global-component v-bind:param="content"></global-component>
</div>
<script type="text/javascript">
    Vue.component(‘global-component‘, {
        props: [‘param‘],
        template: ‘<div>组件的参数:{{ param }}</div>‘
    })
    var vm2 = new Vue({
        el: ‘#app-2‘,
        data: {
            content: ‘‘
        }
    })
</script>

组件可以通过props属性来实现传参

列表渲染在组件中使用

一个很好玩的例子,把完整的代码贴出来

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
    <script src="https://unpkg.com/vue"></script>
</head>
<body>
    <div id="app-3">
        <input
            v-model="newTodoText"
            v-on:keyup.enter="addNewTodo"
            placeholder="输入一个等办事项"
        >
        <ul>
            <li
                is="global-component"
                v-for="(todo, index) in todos"
                v-bind:key="todo.id"
                v-bind:title="todo.title"
                v-on:remove="todos.splice(index, 1)"
            ></li>
        </ul>
    </div>
    <script type="text/javascript">
        // 使用$on(eventName)监听一个事件
        // 使用$emit(eventName)触发一个事件
        Vue.component(‘global-component‘, {
            template: ‘                <li>                    {{ title }}                    <button v-on:click="$emit(\‘remove\‘)">X</button>                </li>            ‘,
            props: [‘title‘]
        })
        var vm3 = new Vue({
            el: ‘#app-3‘,
            data: {
                newTodoText: ‘‘,
                todos: [
                    { id: 1, title: ‘洗碗‘ },
                    { id: 2, title: ‘倒垃圾‘ },
                    { id: 3, title: ‘除草‘ },
                ],
                nextTodoId: 4
            },
            methods: {
                addNewTodo: function() {
                    this.todos.push({
                        id: this.nextTodoId++,
                        title: this.newTodoText
                    })
                    this.newTodoText = ‘‘
                }
            }
        })
    </script>
</body>
</html>
时间: 2024-11-05 00:42:45

Vue.js学习笔记 第八篇 组件的相关文章

Vue.js学习笔记(7)组件详解

在这篇文章之前小颖分享过小颖自己写的组件:Vue.js学习笔记(5)tabs组件和Tree升级版(实现省市多级联动) 先给大家看下小颖写了一个简单的组件示例: 组件: <template> <div class='content' v-if='showFlag'> <input type="text" v-bind:style='{ width:compwidth+"px"}' v-model='compvalue' @keyup='m

Vue.js学习笔记 第七篇 表单控件绑定

本篇主要说明表单控件的数据绑定,这次没有新的知识点 文本框 1.普通文本框 <div id="app-1"> <p><input v-model="textBox" placeholder="输入内容...">输入的内容:{{ textBox }}</p> </div> <script type="text/javascript"> var vm1 = n

Vue.js学习笔记:在元素 和 template 中使用 v-if 指令

f 指令 语法比较简单,直接上代码: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title></title> <script src="https://cdn.bootcss.com/vue/2.2.

vue.js学习笔记(4)— 父子组件之间通信的第一种方式 props 和 $emit

我们知道,vue组件中,父组件把数组传递给子组件的话,通常是使用props传递,而vue规定,prop是只能单向下行传递的,那么子组件要怎么才能实现数据的向上传递呢,这里引述一个概念:"父子组件的关系:prop向下传递,事件向上传递",上一篇文章当中,关于数据向上传递用到的事件方法 $emit() 也进行了详细的说明,不懂的童鞋可以翻回去看一下.下面就是今天要说的父子组件相互通信的问题,点击效果依次如下: 代码如下: <!DOCTYPE html> <html>

Vue.js学习笔记(一) - 起步

本篇将简单介绍一下Vue.js,并在Node.js环境下搭建一个简单的Demo. 一.简介 我个人理解,Vue.js是一套前端视图层的框架,它只关心视图展示和数据绑定,它的一些语法与Angular 1非常相似,如果有Angular 1相关的使用经验,上手会非常快. 相比较其他的React.Angular 2等MVVM框架,它更加的轻量,效率也更高,也能更好的与其他库集成. 它拥有以下几个出色的特性: 数据双向绑定 指令 模板 组件 当前最新的版本为2.1.4.后续也会在这个版本下演示Demo.

vue.js学习笔记(Directives)

想必喜欢前端开发的小伙伴们都或多或少接触过MVVM这个概念,说起MVVM,第一时间想到的便是angularjs,knockoutjs等已经被广泛运用的MVVM框架,之前我也没有在这方面有很多了解,最近在做项目的过程中接触了Vue.js,这是一个小巧精致,性能优异的MVVM框架,可以说对初学者是比较容易入门的,该框架的英文文档写得很好,但是中文版访问还不太稳定,翻译也有待改进,所以自己一遍学习,一遍记录自己的思考,与各位共享学习的经验. 第一篇主要是想谈谈vue.js中的Directives即指令

Vue.js学习笔记(1)

数据的双向绑定(ES6写法) 效果: 没有改变 input 框里面的值时 将input 框里面的值清空时: 重新给  input 框输入  豆豆 后页面中  span  里绑定{{testData.name}}的值随着 input 框值的变化而变化. 在Vue.js中可以使用v-model指令在表单元素上创建双向数据绑定.并且v-model指令只能用于:<input>.<select>.<textarea>这三种标签. <template> <div&

vue.js学习笔记(一):什么是mvvm框架,vue.js的核心思想

一:MVVM框架 MVVM框架的应用场景:  1.针对具有复杂交互逻辑的前端应用 2.提供基础的架构抽象 3.提供ajax数据持久化,保证前端用户体验 二:vue.js的核心思想 (一):数据驱动 (二):数据响应原理 (三):组件化 (四)组件设计原则 1:页面上每个独立的可视/可交互区域视为一个组件 2:每个组件对应一个工程目录,组件所需要的各种资源在这个目录下就近维护 3:页面只不过是组件的容器,组件可以嵌套自由组合形成完整的页面

Vue.js学习笔记: 指令 v-if

v-if  完全根据表达式的值在DOM中生成或移除一个元素.如果v-if表达式赋值为false,那么对应的元素就会从DOM中移除:否则,对应元素的一个克隆将被重新插入DOM中. <!DOCTYPE html> <html lang="en"> <head>     <meta charset="UTF-8">     <title>Title</title> </head> <