angular6 利用 ngContentOutlet 实现组件位置交换(重排)


Posted in Javascript onNovember 02, 2018

ngContentOutlet指令介绍

ngContentOutlet指令与ngTemplateOutlet指令类似,都用于动态组件,不同的是,前者传入的是一个Component,后者传入的是一个TemplateRef。

首先看一下使用:

<ng-container *ngComponentOutlet="MyComponent"></ng-container>

其中MyComponent是我们自定义的组件,该指令会自动创建组件工厂,并在ng-container中创建视图。

实现组件位置交换

angular中视图是和数据绑定的,它并不推荐我们直接操作HTML DOM元素,而且推荐我们通过操作数据的方式来改变组件视图。

首先定义两个组件:

button.component.ts

import { Component, OnInit } from '@angular/core';

@Component({
 selector: 'app-button',
 template: `<button>按钮</button>`,
 styleUrls: ['./button.component.css']
})
export class ButtonComponent implements OnInit {

 constructor() { }

 ngOnInit() {
 }

}

text.component.ts

import { Component, OnInit, Input } from '@angular/core';

@Component({
 selector: 'app-text',
 template: `
 <label for="">{{textName}}</label>
 <input type="text">
 `,
 styleUrls: ['./text.component.css']
})
export class TextComponent implements OnInit {
 @Input() public textName = 'null';
 constructor() { }

 ngOnInit() {
 }

}

我们在下面的代码中,动态创建以上两个组件,并实现位置交换功能。

动态创建组件,并实现位置交换

我们先创建一个数组,用于存放上文创建的两个组件ButtonComponent和TextComponent,位置交换时,只需要调换组件在数组中的位置即可,代码如下:

import { TextComponent } from './text/text.component';
import { ButtonComponent } from './button/button.component';
import { Component } from '@angular/core';

@Component({
 selector: 'app-root',
 template: `
 <ng-container *ngFor="let item of componentArr" >
  <ng-container *ngComponentOutlet="item"></ng-container>
 </ng-container>
 <br>
 <button (click)="swap()">swap</button>
`,
 styleUrls: ['./app.component.css']
})
export class AppComponent {
 public componentArr = [TextComponent, ButtonComponent];
 constructor() {
 }
 public swap() {
  const temp = this.componentArr[0];
  this.componentArr[0] = this.componentArr[1];
  this.componentArr[1] = temp;
 }
}

执行命令npm start在浏览器中可以看到如下效果:

angular6 利用 ngContentOutlet 实现组件位置交换(重排)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Jquery之美中不足小结
Feb 16 Javascript
jQuery中选择器小问题(新人难免遇到)
Mar 31 Javascript
Javascript刷新窗口方法小结
Oct 21 Javascript
探索angularjs+requirejs全面实现按需加载的套路
Feb 26 Javascript
picLazyLoad 实现图片延时加载(包含背景图片)
Jul 21 Javascript
Vue.js系列之项目结构说明(2)
Jan 03 Javascript
Vue.use源码分析
Apr 22 Javascript
jQuery+PHP+Mysql实现抽奖程序
Apr 12 jQuery
详解用node搭建简单的静态资源管理器
Aug 09 Javascript
快速解决vue-cli不能初始化webpack模板的问题
Mar 20 Javascript
bootstrap table实现横向合并与纵向合并
Jul 18 Javascript
解决Vue的文本编辑器 vue-quill-editor 小图标样式排布错乱问题
Aug 03 Javascript
vue单页面实现当前页面刷新或跳转时提示保存
Nov 02 #Javascript
BootStrap中的模态框(modal,弹出层)功能示例代码
Nov 02 #Javascript
Bootstrap的aria-label和aria-labelledby属性实例详解
Nov 02 #Javascript
axios使用拦截器统一处理所有的http请求的方法
Nov 02 #Javascript
vue实现与安卓、IOS交互的方法
Nov 02 #Javascript
解决iview多表头动态更改列元素发生的错误的方法
Nov 02 #Javascript
JavaScript 点击触发复制功能实例详解
Nov 02 #Javascript
You might like
奇怪的PHP引用效率问题分析
2012/03/23 PHP
使用php实现截取指定长度
2013/08/06 PHP
Zend Framework入门教程之Zend_Session会话操作详解
2016/12/08 PHP
PHP超级全局变量【$GLOBALS,$_SERVER,$_REQUEST等】用法实例分析
2019/12/11 PHP
写出更好的JavaScript之undefined篇(上)
2009/11/22 Javascript
jQuery 方法大全方便学习参考
2010/02/25 Javascript
JavaScript判断一个URL链接是否有效的实现方法
2011/10/08 Javascript
JavaScript中的关键字&quot;VAR&quot;使用详解 分享
2013/07/31 Javascript
js图片处理示例代码
2014/05/12 Javascript
jQuery实现预加载图片的方法
2015/03/17 Javascript
如何通过js实现图片预览功能【附实例代码】
2016/03/30 Javascript
js实现显示手机号码效果
2017/03/09 Javascript
jquery中关于bind()方法的使用技巧分享
2017/03/30 jQuery
javascript 数据存储的常用函数总结
2017/06/01 Javascript
JS实现用特殊符号替换字符串的中间部分区域的实例代码
2018/07/24 Javascript
记录vue项目中遇到的一点小问题
2019/05/14 Javascript
layer弹出层自定义提交取消按钮的例子
2019/09/10 Javascript
JS如何在数组指定位置插入元素
2020/03/10 Javascript
如何在postman测试用例中实现断言过程解析
2020/07/09 Javascript
详解Python中的__new__()方法的使用
2015/04/09 Python
Python线程的两种编程方式
2015/04/14 Python
浅谈python中的数字类型与处理工具
2017/08/02 Python
python OpenCV学习笔记之绘制直方图的方法
2018/02/08 Python
详解python做UI界面的方法
2019/02/27 Python
python中的print()输出
2019/04/12 Python
python爬取Ajax动态加载网页过程解析
2019/09/05 Python
python迭代器常见用法实例分析
2019/11/22 Python
Python如何使用Gitlab API实现批量的合并分支
2019/11/27 Python
Python 多线程共享变量的实现示例
2020/04/17 Python
使用Python+Appuim 清理微信的方法
2021/01/26 Python
整理HTML5移动端开发的常用触摸事件
2016/04/15 HTML / CSS
美国班级戒指、帽子和礼服、毕业产品、年鉴:Balfour
2018/11/01 全球购物
Holland & Barrett爱尔兰:英国领先的健康零售商
2019/03/31 全球购物
大学生毕业自我评价范文分享
2013/11/11 职场文书
《孔繁森》教学反思
2014/04/17 职场文书
2016年幼儿园万圣节活动总结
2016/04/05 职场文书