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 相关文章推荐
qTip 基于JQuery的Tooltip插件[兼容性好]
Sep 01 Javascript
JavaScript地图拖动功能SpryMap的简单实现
Jul 17 Javascript
Jquery each方法跳出循环,并获取返回值(实例讲解)
Dec 12 Javascript
javascript计算星座属相(十二生肖属相)示例代码
Jan 09 Javascript
jQuery+AJAX实现遮罩层登录验证界面(附源码)
Sep 13 Javascript
jQuery toggle 代替方法
Mar 22 Javascript
使用jquery提交form表单并自定义action的方法
May 25 Javascript
JavaScript职责链模式概述
Sep 17 Javascript
微信小程序 Button 组件详解及简单实例
Jan 10 Javascript
Javascript实现时间倒计时功能
Nov 17 Javascript
layer.prompt输入层的例子
Sep 24 Javascript
ant design的table组件实现全选功能以及自定义分页
Nov 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中如何使对象可以像数组一样进行foreach循环
2013/08/09 PHP
php生成EAN_13标准条形码实例
2013/11/13 PHP
PHP实现生成数据字典功能示例
2018/05/24 PHP
PHP htmlspecialchars() 函数实例代码及用法大全
2018/09/18 PHP
Thinkphp5框架使用validate实现验证功能的方法
2019/08/27 PHP
php设计模式之工厂模式用法经典实例分析
2019/09/20 PHP
laravel 框架实现无限级分类的方法示例
2019/10/31 PHP
js处理自己不能定义二维数组的方法详解
2014/03/03 Javascript
JS获取iframe中marginHeight和marginWidth属性的方法
2015/04/01 Javascript
JavaScript中停止执行setInterval和setTimeout事件的方法
2015/05/14 Javascript
JS 实现导航菜单中的二级下拉菜单的几种方式
2016/10/31 Javascript
实现JavaScript高性能的数据存储
2016/12/11 Javascript
完美解决node.js中使用https请求报CERT_UNTRUSTED的问题
2017/01/08 Javascript
AngularJS表格样式简单设置方法示例
2017/03/03 Javascript
Ajax异步文件上传与NodeJS express服务端处理
2017/04/01 NodeJs
Js面试算法详解
2018/04/08 Javascript
vue中的inject学习教程
2019/04/24 Javascript
vue中$refs, $emit, $on, $once, $off的使用详解
2019/05/26 Javascript
Vue 实现从文件中获取文本信息的方法详解
2019/10/16 Javascript
Laravel 如何在blade文件中使用Vue组件的示例代码
2020/06/28 Javascript
[50:58]2018DOTA2亚洲邀请赛 4.1 小组赛 B组 Mineski vs EG
2018/04/03 DOTA
9种python web 程序的部署方式小结
2014/06/30 Python
python人人网登录应用实例
2014/09/26 Python
Python中函数及默认参数的定义与调用操作实例分析
2017/07/25 Python
python3获取两个日期之间所有日期,以及比较大小的实例
2018/04/08 Python
用pycharm开发django项目示例代码
2019/06/13 Python
Python实现线性判别分析(LDA)的MATLAB方式
2019/12/09 Python
python实现简单贪吃蛇游戏
2020/09/29 Python
如何利用pycharm进行代码更新比较
2020/11/04 Python
前端隐藏出边界内容的实现方法
2016/04/14 HTML / CSS
日本一家专门经营各种箱包的大型网站:Traveler Store
2016/08/03 全球购物
面试后的感谢信范文
2014/02/01 职场文书
2015年关爱留守儿童工作总结
2015/05/22 职场文书
信息技术国培研修日志
2015/11/13 职场文书
MYSQL(电话号码,身份证)数据脱敏的实现
2021/05/28 MySQL
使用Ajax实现进度条的绘制
2022/04/07 Javascript