vue内置组件component--通过is属性动态渲染组件操作


Posted in Javascript onJuly 28, 2020

我就废话不多说了,大家看代码吧~

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="https://cdn.jsdelivr.net/npm/vue"></script>
		<script src="https://cdn.bootcss.com/vue-router/3.1.3/vue-router.js"></script>
		<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
	</head>
	<body>
		<div id="app">
			<input @click="currentrouter='Home'" type="button" value="首页"/>
			<input @click="currentrouter='Fenlei'" type="button" value="分类"/>
			<input @click="currentrouter='My'" type="button" value="我的"/>
			<!-- 动态组件 component -->
			<component :is="currentrouter"></component>
		</div>
		
		<template id="home">
			<div>
				{{msg}}
			</div>
		</template>
		<template id="fenlei">
			<div>
				{{msg}}
			</div>
		</template>
		<template id="my">
			<div>
				{{msg}}
			</div>
		</template>
		
		<script>
			//局部定义三个组件
			const Home = {
				template:"#home",
				data(){
					return{
						msg:"这里是home组件"
					}
				}
			}
			const Fenlei = {
				template:"#fenlei",
				data(){
					return{
						msg:"这里是fenlei组件"
					}
				}
			}
			const My = {
				template:"#my",
				data(){
					return{
						msg:"这里是my组件"
					}
				},
			}
			//vue 实例
			var vm = new Vue({
				el:"#app",
				components:{
					Home,
					Fenlei,
					My
				},
				data:{
					msg:"hello world",
					currentrouter:"Home"
				},
				methods:{
					
				}
			})
			
		</script>
	</body>
</html>

补充知识:详解vue组件的is特性:限制元素&动态组件

在vue.js组件教程的一开始提及到了is特性

vue内置组件component--通过is属性动态渲染组件操作

意思就是有些元素,比如 ul 里面只能直接包含 li元素,像这样:

<ul>
  <li></li>
</ul>
//而不能:
<ul>
  <your-component>
</ul>

这样就不能复用your-component这个组件了,如果要达到我们的目的,我们就要使用is特性像这样:

<ul>
  <li is="your-component"></li>
</ul>

组件功能是vue项目的一大特色。组件可以扩展html元素,可以封装可重用的代码,可以增加开发效率。它是自定义元素,vue.js的编译器为它添加特殊功能。有些情况,组件也可以是原生HTML元素的形式,以is特性进行扩展。

那么is特性究竟是什么呢?有什么用途呢?

1、限制元素

其实简单的来说,因为vue模板就是dom模板,使用的是浏览器原生的解析器进行解析,所以dom模板的限制也就成为vue模板的限制了,要求vue模板是有效的HTML代码片段。但是由于dom的一些html元素对放入它里面的元素有限制,所以导致有些组件没办法放在一些标签中,比如<ul></ul> <select></select><a></a> <table></table>等等这些标签中,所以需要增加is特性来扩展,从而达到可以在这些受限制的html元素中使用。例如:

<ul>
 <li is="my-component"></li>
</ul>

而不能使用下面的方式,因为下面的方式会将自定义组件<my-component>当做无效的内容,导致错误的渲染结果

<ul>
 <my-component></mu-component>
<ul>

其实两种写法表达的意思是一致,但是第二种写法是不合法的,会导致错误。

2、动态组件

在我们平时使用vue中的模板的时候,许多时候都是直接定义成一个固定的模板,但是,vue中提供了一个动态模板,可以在任意模板中切换,就是用vue中<component>用:is来挂载不同的组件。

<div id="app" v-cloak>
    <component :is="currentView"></component>
    <button @click="handleChangeView('A')">A</button>
    <button @click="handleChangeView('B')">B</button>
    <button @click="handleChangeView('C')">C</button>
</div>

    var app = new Vue({
      el: '#app',
      components:{
        comA:{
          template:`
            <div>组件A</div>
          `
        },
        comB:{
          template:`
            <div>组件B</div>
          `
        },
        comC:{
          template:`
            <div>组件C</div>
          `
        }
      },
      data:{
        currentView:'comA'
      },
      methods:{
        handleChangeView:function(component){
          this.currentView='com'+component;
        }
      }
    });

我们在components中注册了三个模板,当我们点击当前按钮的时候,就会将模板切换模板,可以说是非常方便了。

以上这篇vue内置组件component--通过is属性动态渲染组件操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery多选项卡效果实例代码(附效果图)
Mar 23 Javascript
基于JavaScript制作霓虹灯文字 代码 特效
Sep 01 Javascript
JQuery实现简单的图片滑动切换特效
Nov 22 Javascript
轻松学习jQuery插件EasyUI EasyUI实现拖放商品放置购物车
Nov 30 Javascript
jQuery插件扩展测试实例
Jun 21 Javascript
AngularJs concepts详解及示例代码
Sep 01 Javascript
ES6 javascript的异步操作实例详解
Oct 30 Javascript
Angular Renderer (渲染器)的具体使用
May 03 Javascript
js实现类似iphone的网页滑屏解锁功能示例【附源码下载】
Jun 10 Javascript
微信小程序实现弹出菜单动画
Jun 21 Javascript
jquery弹窗时禁止body滚动条滚动的例子
Sep 21 jQuery
js实现打字小游戏
Dec 17 Javascript
Postman如何实现参数化执行及断言处理
Jul 28 #Javascript
微信小程序实现电子签名功能
Jul 29 #Javascript
Vue的自定义组件不能使用click方法的解决
Jul 28 #Javascript
浅谈JavaScript中this的指向问题
Jul 28 #Javascript
浅谈JavaScript中this的指向更改
Jul 28 #Javascript
Postman内建变量常用方法实例解析
Jul 28 #Javascript
使用Webpack 搭建 Vue3 开发环境过程详解
Jul 28 #Javascript
You might like
PHP聊天室技术
2006/10/09 PHP
mysql总结之explain
2012/02/27 PHP
php之CodeIgniter学习笔记
2013/06/17 PHP
PHP中遇到的时区问题解决方法
2015/07/23 PHP
php封装db类连接sqlite3数据库的方法实例
2017/12/19 PHP
PHP中一个有趣的preg_replace函数详解
2018/08/15 PHP
javascript中创建对象的三种常用方法
2010/12/30 Javascript
jquery 文本上下无缝滚动,鼠标放上去就停止 小例子
2013/06/05 Javascript
纯js实现无限空间大小的本地存储
2015/06/18 Javascript
介绍JavaScript的一个微型模版
2015/06/24 Javascript
JavaScript Ajax编程 应用篇
2016/07/02 Javascript
jQuery EasyUI ProgressBar进度条组件
2017/02/28 Javascript
jQuery实现导航栏头部菜单项点击后变换颜色的方法
2017/07/19 jQuery
Vue组件通信实践记录(推荐)
2017/08/15 Javascript
微信小程序实现折叠面板
2018/01/31 Javascript
基于vue.js中关于下拉框的值默认及绑定问题
2018/08/22 Javascript
JavaScript常见事件对象与操作实例总结
2019/01/05 Javascript
Python(Tornado)模拟登录小米抢手机
2013/11/12 Python
python实现自动发送邮件
2018/06/20 Python
Python模拟浏览器上传文件脚本的方法(Multipart/form-data格式)
2018/10/22 Python
python切片(获取一个子列表(数组))详解
2019/08/09 Python
pytorch实现用Resnet提取特征并保存为txt文件的方法
2019/08/20 Python
Python基于smtplib协议实现发送邮件
2020/06/03 Python
python框架flask入门之环境搭建及开启调试
2020/06/07 Python
python缩进长度是否统一
2020/08/02 Python
德国宠物用品、宠物食品及水族馆网上商店:ZooRoyal
2017/07/09 全球购物
买房子个人收入证明
2014/01/16 职场文书
培训协议书范本
2014/04/22 职场文书
党员群众路线学习心得体会
2014/11/04 职场文书
会计求职简历自我评价
2015/03/10 职场文书
2015教师个人工作总结范文
2015/03/31 职场文书
故意杀人罪辩护词
2015/05/21 职场文书
看看如何用Python绘制小米新版天价logo
2021/04/20 Python
MySQL获取所有分类的前N条记录
2021/05/07 MySQL
vue使用节流函数的踩坑实例指南
2021/05/20 Vue.js
德生2P3收音机开箱评测
2022/04/30 无线电