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 相关文章推荐
js 获取元素下面所有li的两种方法
Apr 14 Javascript
浅谈js的setInterval事件
Dec 05 Javascript
JavaScript使用ActiveXObject访问Access和SQL Server数据库
Apr 02 Javascript
Jquery效果大全之制作电脑健康体检得分特效附源码下载
Nov 02 Javascript
bootstrap table小案例
Oct 21 Javascript
JS中关于事件处理函数名后面是否带括号的问题
Nov 16 Javascript
浅谈React前后端同构防止重复渲染
Jan 05 Javascript
关于vue单文件中引用路径的处理方法
Jan 08 Javascript
微信小程序如何获取用户信息
Jan 26 Javascript
如何在js代码中消灭for循环实例详解
Jul 29 Javascript
vuex的module模块用法示例
Nov 12 Javascript
js实现上传按钮并显示缩略图小轮子
May 04 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与javascript的两种交互方式
2006/10/09 PHP
PHP用身份证号获取星座和生肖的方法
2013/11/07 PHP
Yii视图CGridView列表用法实例分析
2016/07/12 PHP
Laravel统一错误处理为JSON的方法介绍
2020/10/18 PHP
Extjs 几个方法的讨论
2010/01/28 Javascript
EXT窗口Window及对话框MessageBox
2011/01/27 Javascript
如何让div span等元素能响应键盘事件操作指南
2012/11/13 Javascript
javascript匿名函数应用示例介绍
2014/03/07 Javascript
js使用循环清空某个div中的input标签值
2014/09/29 Javascript
C++中的string类的用法小结
2015/08/07 Javascript
JavaScript下的时间格式处理函数Date.prototype.format
2016/01/27 Javascript
jQuery1.9+中删除了live以后的替代方法
2016/06/17 Javascript
Vuejs第九篇之组件作用域及props数据传递实例详解
2016/09/05 Javascript
bootstrap折叠调用collapse()后data-parent不生效的快速解决办法
2017/02/23 Javascript
Angular2学习教程之ng中变更检测问题详解
2017/05/28 Javascript
详解Javascript中new()到底做了些什么?
2018/03/29 Javascript
在vue-cli的组件模板里使用font-awesome的两种方法
2018/09/28 Javascript
详解Webstorm 下的Angular2.0开发之路(图文)
2018/12/06 Javascript
微信小程序自定义modal弹窗组件的方法详解
2020/12/20 Javascript
python查询mysql中文乱码问题
2014/11/09 Python
简单的Apache+FastCGI+Django配置指南
2015/07/22 Python
Django中STATIC_ROOT和STATIC_URL及STATICFILES_DIRS浅析
2018/05/08 Python
python脚本实现验证码识别
2018/06/07 Python
python3.5基于TCP实现文件传输
2020/03/20 Python
对Python subprocess.Popen子进程管道阻塞详解
2018/10/29 Python
python 格式化输出百分号的方法
2019/01/20 Python
DRF框架API版本管理实现方法解析
2020/08/21 Python
浅析Python的命名空间与作用域
2020/11/25 Python
Pycharm创建python文件自动添加日期作者等信息(步骤详解)
2021/02/03 Python
建筑工程造价专业自荐信
2014/07/08 职场文书
企业党员岗位承诺书
2015/04/27 职场文书
2019个人工作总结
2019/06/21 职场文书
js Proxy的原理详解
2021/05/25 Javascript
TensorFlow的自动求导原理分析
2021/05/26 Python
一小时学会TensorFlow2之基本操作2实例代码
2021/09/04 Python
vue报错function () { [native code] },无法出现我们想要的内容 Unknown custom element
2022/04/11 Vue.js