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 相关文章推荐
不错的新闻标题颜色效果
Dec 10 Javascript
一个js封装的不错的选项卡效果代码
Feb 15 Javascript
Jquery实战_读书笔记2 选择器
Jan 22 Javascript
JavaScript异步编程Promise模式的6个特性
Apr 03 Javascript
Underscore.js常用方法总结
Feb 28 Javascript
jQuery利用sort对DOM元素进行排序操作
Nov 07 Javascript
javascript 日期相减-在线教程(附代码)
Aug 17 Javascript
Vue插件打包与发布的方法示例
Aug 20 Javascript
vue组件中的样式属性scoped实例详解
Oct 30 Javascript
js实现3D照片墙效果
Oct 28 Javascript
JQuery省市联动效果实现过程详解
May 08 jQuery
解决vue props传Array/Object类型值,子组件报错的情况
Nov 07 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的图形函数中显示汉字
2006/10/09 PHP
PHP中创建并处理图象
2006/10/09 PHP
fleaphp下不确定的多条件查询的巧妙解决方法
2008/09/11 PHP
WordPress中给文章添加自定义字段及后台编辑功能区域
2015/12/19 PHP
利用PHP将图片转换成base64编码的实现方法
2016/09/13 PHP
JQUERY设置IFRAME的SRC值的代码
2010/11/30 Javascript
根据当前时间在jsp页面上显示上午或下午
2014/08/18 Javascript
js实现点击文本框显示日期选择器特效代码分享
2020/05/21 Javascript
js点击文本框后才加载验证码实例代码
2015/10/20 Javascript
jQuery实现文字自动横移
2017/01/08 Javascript
树结构之JavaScript
2017/01/24 Javascript
动态加载JavaScript文件的3种方式
2018/05/05 Javascript
JavaScript求一组数的最小公倍数和最大公约数常用算法详解【面向对象,回归迭代和循环】
2018/05/07 Javascript
AngularJS上传文件的示例代码
2018/11/10 Javascript
微信域名检测接口调用演示步骤(含PHP、Python)
2019/12/08 Javascript
JS实现拼图游戏
2021/01/29 Javascript
JS实现移动端双指缩放和旋转方法
2019/12/13 Javascript
Vue实现一种简单的无限循环滚动动画的示例
2021/01/10 Vue.js
纯Python开发的nosql数据库CodernityDB介绍和使用实例
2014/10/23 Python
Python素数检测的方法
2015/05/11 Python
python编程实现12306的一个小爬虫实例
2017/12/27 Python
PyCharm 配置远程python解释器和在本地修改服务器代码
2019/07/23 Python
IE矩阵Matrix滤镜旋转与缩放及如何结合transform
2012/11/29 HTML / CSS
Jimmy Choo美国官网:周仰杰鞋子品牌
2018/06/08 全球购物
expedia比利时:预订航班+酒店并省钱
2018/07/13 全球购物
为什么在使用动态 SQL 语句时必须为低层数据库对象授予权限
2012/12/13 面试题
优秀部门获奖感言
2014/02/14 职场文书
仓库管理员岗位职责
2014/03/19 职场文书
车间安全生产标语
2014/06/06 职场文书
医生辞职信范文
2015/03/02 职场文书
九年级数学教学反思
2016/02/17 职场文书
导游词之西安骊山
2019/12/03 职场文书
golang 如何通过反射创建新对象
2021/04/28 Golang
详解python网络进程
2021/06/15 Python
golang为什么要统一错误处理
2022/04/03 Golang
Mysql中常用的join连接方式
2022/05/11 MySQL