浅谈Vue下的components模板

Vue实战之Vue中组件(component) es6基本语法及使用 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>vue之系列课程</title> </head> <body> <div id="app"> <h1>{{msg}}</h1> <!-- ES6: EcmaScri 阅读详情

组件

创建方式一:

HTML: <div id="app"><c1></c1></div>

/*要注意,局部模板的作用范围 只在 相对的vue对象 范围内, 比如此例子 <haha></haha>的作用范围 只在 <div id="app"></div>内*/

let vm = new Vue({ ...

    components:{"c1":{ template:"<div>i am c1<div>" }}

});

 

创建方式二:Vue.component 全局组件 --- 全局模板 顾名思义 肯定是 放在哪里都能用

HTML: <div id="app"><c2></c22></div>

 

//这里使用Vue.component原型方法来创造。注意,全局组件注册位置必须在父实例的模块上面(即在初始化组件根实例之前,注册好组件)

Vue.component(

      "c2",

      template:"<div>i am c2<div>"

);

let vm = new Vue({...,components:{  这里则不需要添加 } });

 

创建方式三:局部注册

不必在全局注册每个组件。通过使用组件实例选项注册,可以使组件仅在另一个实例/组件的作用域中可用:

HTML: <div id="app"><c3></c3></div>

 

let c3={ template:"<div>嘻嘻嘻<div>" }

let vm = new Vue({ ...,components: { c3} });

 

防止有些浏览器不认识标签报错,用 is 属性判断

is 属性判断

 

组件中的data必须返回object类型

 

父、子组件

在 Vue.js 中,父子组件的关系可以总结为 props down, events up 。父组件通过 props 向下传递数据给子组件,子组件通过 events 给父组件发送消息。看看它们是怎么工作的。

 

使用Props传递数据

组件实例(父实例)的作用域是孤立的。这意味着不能并且不应该在子组件的模板内直接引用父组件的数据。可以使用 props 把数据传给子组件。

注:把父实例的引用类型的数据传给子组件,子组件也能反向修改这个引用类型的数据。这种操作方式有两面性,看个人怎么用了,官方是不推荐这么操作,如上是建议用props把数据传给子组件,通过event或emit返给父实例/父组件

例如:

 

prop 是父组件用来传递数据的一个自定义属性。子组件需要显式地用 props 选项 声明 “prop”:


 

Vue.component('child', {

// 声明 props

props: ['message'], //prop 是父组件用来传递数据的一个自定义属性, props: ['属性名']

// 就像data 一样,prop可用在模板内. 同样也可在 vm实例中像"this.message"这样使用

template: '<span>{{ message }}</span>'

})

然后向它传入一个普通字符串:


 

<child message="hello!"></child> //子组件需要显式地用 props选项声明

动态 Props

v-bind

类似于用 v-bind 绑定 HTML 特性到一个表达式,组件也可以使用 v-bind 动态绑定 props 的值 到 父组件的数据中。

每当父组件的数据变化时,该变化也会传给子组件:


 

<div>

//[父组件的数据中,每当父组件的数据变化时,该变化也会传导给子组件]

<input v-model="parentMsg"> //双向绑定

<br>

<child v-bind:my-message="parentMsg"></child> //子组件

</div>

使用 v-bind 的缩写语法通常更简单:<child :my-message="parentMsg"></child>

 

 

字面量语法 vs 动态语法

初学者常犯的一个错误是使用字面量语法传递数值:

<!-- 传递了一个字符串"1" -->

<comp some-prop="1"></comp>

因为它是一个字面 prop ,它的值以字符串 "1" 而不是以实际的数字传下去。

如果想传递一个实际的 JS数字,需要使用 v-bind ,从而让它的值被当作JS表达式计算:

<!-- 传递实际的数字 -->

<comp v-bind:some-prop="1"></comp>

 

 

注: 测试发现,在组件的prop中, prop-name="..." 和 v-bind:prop-name="..." 有区别

 

单向数据流

prop 是单向绑定的:当父组件的属性变化时,将传导给子组件,但是不会反过来。这是为了防止子组件无意修改了父组件的状态。

另外,每次父组件更新时,子组件的所有 prop 都会更新为最新值。这意味着你不应该在子组件内部改变 prop 。如果你这么做了,Vue 会在控制台给出警告。(个人测试没有警告!!!)

通常有两种改变 prop 的情况:(父影响子,子不影响父)

1. prop 作为初始值传入子组件之后只是将它的初始值作为本地数据的初始值使用. 在这种情况下,最好定义一个本地的 data 属性并将这个 prop 用作其初始值:

 

例如,定义一个局部 data 属性,并将 prop 的初始值作为局部数据的初始值:

props: ['initialCounter'], //子组件
  data: function () { //子组件
  return { counter: this.initialCounter }//counter子组件的局部数据
}

父控件的变量值作为子组件的属性值,如:

2. 这个 prop 以一种原始的值传入且需要进行转换。在这种情况下,最好使用这个 prop 的值来定义一个计算属性

    例如,在 computed 定义一个属性,此属性从 prop 的值计算得出。

    <div id="div8">

        <input type='text' v-model="msg">

        <child v-bind:message='msg'></child>

    </div>

    <script type="text/javascript">

        Vue.component('child', {

            props: ['message'],

            template: '<p>message:{{ normalizedSize}} </p>',

            computed: {

                normalizedSize: function() {

                    return this.message += "_str"

                }

            }

        })

        new Vue({

            el: '#div8',

            data: {

                msg: '我是msg'

            }

        })

    </script>

 

执行结果:

 

再如:从父控件向子组件传值

   

 

 

Prop 验证

组件可以为 props 指定验证要求。如果未指定验证要求,Vue 会发出警告。当组件给其他人使用时这很有用。

prop 是一个对象而不是字符串数组时,它包含验证要求:

type 可以是下面原生构造器:

  • String
  • Number
  • Boolean
  • Function
  • Object
  • Array

type 也可以是一个自定义构造器,使用 instanceof 检测。

当 prop 验证失败了, Vue 将拒绝在子组件上设置此值,如果使用的是开发版本会抛出一条警告

 

#自定义事件

我们知道,父组件是使用 props 传递数据给子组件,但如果子组件要把数据传递回去,应该怎样做?那就是自定义事件!

 

使用 v-on 绑定自定义事件

每个 Vue 实例都实现了事件接口(Events interface),即:

  • 使用 $on(eventName) 监听事件
  • 使用 $emit(eventName) 触发事件

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

下面是一个例子,在本例中,子组件已经和它外部完全解耦了。它所做的只是触发一个父组件关心的内部事件:

 

给组件绑定原生事件

有时候,你可能想在某个组件的根元素上监听一个原生事件。可以使用 .native 修饰 v-on 。例如:

<my-component v-on:click.native="doTheThing"></my-component>

使用自定义事件的表单输入组件

自定义事件也可以用来创建自定义的表单输入组件,使用 v-model 来进行数据双向绑定。牢记:

<input v-model="something">

仅仅是一个语法糖,他也相当于:<input v-bind:value="something" v-on:input="something = $event.target.value">

所以在组件中使用时,它相当于下面的简写:<input v-bind:value="something" v-on:input="something = arguments[0]">

所以要让组件的 v-model 生效,它必须:

  • 接受一个 value 属性
  • 在有新的 value 时触发 input 事件

例如,货币过滤器:

 

 

 

 

(模板的继承)全局模板 顾名思义 肯定是 放在哪里都能用

/*

  我们来讲个最简单的 父亲,儿子 ,孙子的 例子

  要注意以下几点:

        1.先实例化对象vm

        2.造出parent模板,并挂载在 vm的 conponents 下

        3.造出 son 模板 并 挂载 在 父级 parent 的conponents下,并在 父级template属性中 包裹住自己的 模板名标签 ;同理 造出孙子标签

        4.在HTML节点中添加 目标 根节点

              (节点的顺序一定要书写正确)

*/

<div id="app">

    <parent></parent>

</div>

 

//创建 孙子 模板

let grendson = { 

    template:"<div>孙子</div>"

}

 

//创建 儿子 模板

let son= { 

    template: "<son>儿子<grendson >孙子</grendson ></son>"

    components:{

        grendson 

    }

}

 

//创建 父亲 模板

let parent = { 

    template:"<div>父亲<son></son></div>"

    components:{

        son

    }

}

//实例化vm对象

let vm = new Vue({

    el: "#app",

    data:{

    },

    components:{

        parent

    }

});

 

 

 

实例一

 

css:

<style type="text/css">

        .tab-button {

          padding: 6px 10px;

          border-top-left-radius: 3px;

          border-top-right-radius: 3px;

          border: 1px solid #ccc;

          cursor: pointer;

          background: #f0f0f0;

          margin-bottom: -1px;

          margin-right: -1px;

        }

        .tab-button:hover {

          background: #e0e0e0;

        }

        .tab-button-active {

          background: #e0e0e0;

        }

        .tab {

          border: 1px solid #ccc;

          padding: 10px;

        }

</style>

 

html:

<div id="app">

        <div v-for="(item, index) in buttons">

            <button @click="change($event)" :id="item.id" class="tab-button" 

                 :class="{'tab-button-active': item.isActive}">{{item.name}}</button>

            <div class="tab">

                <component v-bind:is="currentTabComponent"></component>

            </div>

        </div>

</div>

 

script:

var vm = new Vue({

    el: '#app',

    data:{

        currentTab: 'Home',

        tabs:['Home','Posts','Archive'],

        buttons: [

            {id: 0, name: 'Home', isActive:true},

            {id: 1, name: 'Posts', isActive:false},

            {id: 2, name: 'Archive', isActive:false}

        ],

        isActive: false,

        prevBtn: 0

    },

    computed: {

        // 计算属性是基于它们的响应式依赖进行缓存的。只在相关响应式依赖发生改变时它们才会重新求值。

        // 这里当 this.index 有改变时,currentView()会重新求值

        currentTabComponent(){

            return 'tab-' + this.currentTab.toLowerCase()

        }

    },

    methods: {

        change( $event ){

            var index = $event.target.id;

            

            Vue.set(vm.buttons[vm.prevBtn], 'isActive', false);

            Vue.set(vm.buttons[index], 'isActive', true);

            this.currentTab = this.tabs[index%3];

            

            vm.prevBtn = index;

        }

    }

})

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

前端必知必会-Vue 组件Components 组件是可重复使用且自包含的代码片段,它封装了用户界面的特定部分,以便我们可以制作可扩展且更易于维护的 Vue 应用程序。我们可以自己在 Vue 中制作组件,也可以使用我们稍后将了解的内置组件,例如 或。这里我们将重点介绍我们自己制作的组件。本文介绍了Vue 组件Components的使用,如有问题欢迎私信和评论。 阅读详情

相关推荐

Vue基础(四):组件及组件间的传值

​ 定义子组件自己的数据​ data必须是一个函数,里面返回一个对象,在对象中定义数据data() {return {

qq_56743396的博客 530

vue 动态组件Components

组件

zongzi494的博客 898

保姆级避坑指南:用Keil和J-Flash搞定凌思微LE5010蓝牙芯片的首次程序下载

本文提供了一份详细的保姆级避坑指南,帮助开发者使用Keil和J-Flash工具完成凌思微LE5010蓝牙芯片的首次程序下载。文章重点解决了算法文件混淆、协议栈漏烧和仿真器连接异常等常见问题,并详细介绍了开发环境配置、协议栈烧录和下载接口的物理层奥秘,助力开发者高效完成蓝牙开发任务。

weixin_28739079的博客 467

快速搞懂Vue里面components和template

vue可以把内容变成组件化,然后提高复用性,那是怎样进行组件化,然后使用呢? 1.先写组件 2.引用组件 我们是单独写的一个js文件存放组件的所以它不是全局引用的,所以我就要把上面写好的registerForm组件引用过来,在这里它的名字被我指定做了loginForm 3.使用组件 上面我们只是 引用了,就好像声明一样,我还没有使用它,所以,要使用它就要在template:写出我们的引用后的...

多凡的博客 3万+

不用公网IP!用Ollama+Chatbox搭建家庭AI助手(内网穿透方案对比)

本文详细介绍了如何利用Ollama和Chatbox在家庭局域网中搭建本地AI助手,无需公网IP即可实现内网穿透。通过对比不同穿透方案(如Tailscale、FRP等),提供最优配置建议,帮助用户低成本部署隐私安全的家庭AI系统,适用于智能家居、儿童教育等多种场景。

weixin_26765287的博客 460

蓝桥杯单片机开发实战:Keil环境配置与IAP15F2K61S2头文件设置详解

本文详细讲解了为蓝桥杯单片机竞赛配置Keil开发环境的关键步骤,重点解析了IAP15F2K61S2专用头文件的获取与设置方法。通过使用STC-ISP工具添加芯片型号和头文件,确保编译器能正确识别寄存器,是成功进行单片机编程和竞赛备赛的基础。文中还提供了从软件安装、工程创建到常见问题排查的完整实战指南。

soda5的博客 886

浅谈Vue 中的组件及组件传值

浅谈 vue 中的组件 一 、初识组件 组件 (Component) 是 Vue.js 最强大的功能之一。组件可以扩展 HTML 元素,封装可重用的代码。 1、定义组件 Vue自定义组件分为两种:全局注册和局部注册,全局组件可以在任何地方引用,局部组件只能在当前Vue实例使用。 全局注册 放在通过new创建的Vue实例当中 Vue.component('my-component', { t...

yyxsww的博客 265

Polyworks宏脚本开发入门:5分钟搞定环境搭建与基础命令录制

本文详细介绍了Polyworks宏脚本开发的入门指南,包括环境搭建、基础命令录制和核心对象操作。通过5分钟快速启动开发模式,掌握自动化操作流程和脚本调试技巧,帮助工程师高效完成工业测量与三维检测任务。

weixin_29306875的博客 533

React学习心得浅谈

文章目录React学习浅谈(1)-技术栈1. React技术栈1.1. 运行编译环境1.2. ES61.3. React1.4 Redux1.5 Middleware2. 环境搭建2.1 搭建开发环境2.2 搭建编译环境2.3 搭建完整的项目开发环境3. 编码设计3.1 创建项目目录3.2 编写action3.3 编写reduces3.4 编写components3.5 编写containers ...

Coding Road 2353

TIFF文件渲染避坑指南:Three.js与Cesium的5个关键差异点

本文深入对比了Three.js与Cesium在渲染TIFF文件时的5个核心差异点,包括坐标系处理、内存管理、着色器系统、性能优化策略和错误处理机制。重点解析了Cesium的全球WGS84坐标系与Three.js局部坐标系对地理空间数据渲染的根本影响,并提供了针对性的性能优化与调试方案,帮助开发者根据项目需求选择合适的3D引擎并有效避坑。

weixin_29243279的博客 332

Changer: Feature Interaction Is What You Need forChange Detection

还有“交换“交互是一种完全不需要参数和计算的操作,它是通过交换空间或通道维度上的双时态特征映射来实现的,交换的特征在经过后续的卷积或令牌混合时进行混合。方法二:提出了两种简单的交互策略,AD和特征“交换”,大量的实验表明,它们可以极大地提高MetaChanger的性能,特别是特征“交换”,即使嵌入到复杂的网络中或应用于具有挑战性的数据集。在这里,我们用虚线勾勒本文的重点。这是变化检测任务的基本问题,双时相图像提供了同一地区在不同时间点的图像数据,通过对比这两个时间点的图像,我们可以检测出该地区的变化。

yokon的博客 1622

以无厚入有间:浅谈dagger.js的无组件设计

本文探讨了现代前端框架过度组件化的问题,并提出了一种基于指令的解决方案。Dagger.js摒弃组件概念,以DOM元素为最小逻辑单元,通过指令(如+load、*exist)直接控制元素行为。相比Vue/React的组件级抽象,它能实现更细粒度的控制,天然支持Web Components,无需构建工具或虚拟DOM。这种设计让HTML重获运行时能力,使开发者能更自由地在任意层级操作DOM,实现从完整应用到局部交互的无缝衔接。Dagger.js不是对抗组件化,而是回归Web本质,让HTML、CSS、JS重新融为一体

2404_89388058的博客 467

【TC3xx芯片】TC3xx芯片UCB详解

TC3xx芯片UCB详解

qq_36056498的博客 1万+

VUE-组件(component)

VUE组件介绍

damadashen的博客 1万+

Python从0到100完整学习指南(必看导航)

想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Python爬虫、Web开发、 计算机视觉、机器学习、神经网络以及人工智能相关知识,成为学业升学和工作就业的先行者!

拥有百余位万粉技术博主、200余位可合作代发博主,私域技术社群规模达千人,商务合作私信 6万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Vue2.0 组件实现动态模板(即Template)

从这篇文章得到启发 先定义一个组件从外部接收Template,然后在组件里调用 <template > <div ref="markedContent"></div> </template> <script> import Vue from 'vue/dist/vue.esm.js' export default { name: 'wf-marked-content', props: ['content'], mounte..

lee576的专栏 9695

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Vue组件(Component)

在正式介绍组件前,先看一个Vue组件的简单示例感受一下,代码如下:组件是可复用的Vue实例,且带有一个名字,在这个示例中组件名字是button-counter。可以在一个通过new Vue创建的Vue根实例中,把这个组件作为自定义标签来使用,代码如下:Web的组件其实就是页面组成的一部分,好比是计算机中的每一个硬件(如硬盘、键盘、鼠标等),它具有独立的逻辑和功能或界面,同时又能根据规定的接口规则进行相互融合,从而变成一个完整的应用。

leva的博客 1万+

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Vue2.5学习笔记(二)深入了解组件

1.组件使用的细节 1.2 子标签内使用组件 假设想在表格便签内使用一个组件作为行,直接使用组件是不行的,原因在于tbody内只能放tr便签,否则浏览器就会将tbody内的标签解析到外面,从而导致结构的错乱。 为了解决这个问题,我们可以使用is特性,将is特性设置为组件名称,这样既保证了tbody和tr之间的层级关系,也使用了组件。 1.2 非根组件的data必须是一个函数 一个组件的 data 选项必须是一个函数,因此每个实例可以维护一份被返回对象的独立的拷贝。 1.3 在Vue中操作DOM:使用ref

Zijeak的博客 4512

vue组件component的使用

一、全局注册组件 全局注册就是在构造器的外部用Vue.component来注册。 1.如何定义一个组件 <div id="app"> <wzq></wzq> </div> <script> Vue.component('wzq',{ template:`<h1...

独宠子沫的博客 7093

vue---组件定义1(三种方式创建自定义组件)---component、template

vue中的组件----组件定义 <title>vue中的组件</title> <style> .hello { border-bottom: solid deeppink 0.05rem; } </style> </head> <body> <!-- 3️⃣ --> <template id="tpl"> <div

DcTbnk的博客 1158

Vue项目中components组件(模板)的使用

在web项目开发过程中,我们经常会遇到重复代码结构,比如页面的头部、底部等,通常我们都是作为模板或者公共文件进行设计使用,在vue中,我们可以使用components组件(模板)来实现。下面我们按步骤实现组件的使用。 第一步:创建组件vue文件 我们在src目录中的视图view目录中,创建组件目录,如header,再在header目录下创建header.vue文件,作为组件文件,在header.vue中加入所需元素。 第二步:引入组件文件 在需要引入组件的vue文件中引入组件文件,如在in...

糖果π 2万+

关于vue项目中components和template的理解

关于vue项目中 components: { App }, template: '<App/>'的理解 原代码: 效果: 根据名字猜想 new Vue({ el: '#app', router: router, components: { App }, template: '<App/>' }); 代码块中 components: { App }, ...

GiornoGiovanna的博客 1万+

【Vue】组件(component)

文章目录一、什么是组件二、为什么需要组件三、创建一个组件四、组件的复用五、通过 Prop 向子组件传递数据六、通过插槽分发内容七、动态组件八、注意事项 一、什么是组件 所谓的组件,其实就是我们通过vue自定义的一些标签。在自定义的标签中,其实已经封装好了一些自定义的特定的HTML代码。 你也许会疑问,为什么要特意的将HTML代码封装起来。其实是这样的,我们使用组件一方面可以减少HTML的代码(视觉上是这样的),另一方面可以极大的提高代码的复用。 你可能会有页头、侧边栏、内容区等组件,每个组件又包含了其它

✈ 正在努力 の 寒江(StudiousTiger) ✌ 呐 ✈ 8499

vue-component组件

组件(Component)是自定义封装的功能。在前端开发过程中,经常出现多个网页的功能是重复的,而且很多不同的页面之间,也存在同样的功能。将相同的功能进行抽取,封装为组件,这样,前端人员就可以在组件化开发时,只需要书写一次代码,随处引入即可使用。组件系统让我们可以用独立可复用的小组件来构建大型应用,几乎任意类型的应用的界面都可以抽象 为一个组件树。

CAUC_lin的博客 6117

vue入门(四)组件components

一、基本介绍 组件是可复用的Vue实例,可以在一个通过new Vue创建的Vue根实例中,把这个组件作为自定义元素来使用。 组件也可以包含data、computed、watch、methods以及生命周期钩子等,除了el。 1、一个组件的data必须是一个函数 这样,每个实例可以维护自己独立的数据,而不是每个组件都使用同一个数据: data:function(){ ...

欧唯薇 3550
上一篇: 跟随屏幕滚动后固定导航到顶端
下一篇: AnguarJS 2.0学习 --- 基础知识笔记(1)基础框架里的文件
天意pt
博客等级 码龄14年 10粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值