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 变量类型转换常用函数与代码[比较全]
Dec 01 Javascript
jquery实现手机发送验证码的倒计时代码
Feb 12 Javascript
基于javascript实现图片懒加载
Jan 05 Javascript
JavaScript仿flash遮罩动画效果
Jun 15 Javascript
Node.js如何自动审核团队的代码
Jul 20 Javascript
浅谈JS继承_寄生式继承 &amp; 寄生组合式继承
Aug 16 Javascript
原生js实现图片放大缩小计时器效果
Jan 20 Javascript
jQuery事件详解
Feb 23 Javascript
JavaScript实现一个空中避难的小游戏
Jun 06 Javascript
详解在React中跨组件分发状态的三种方法
Aug 09 Javascript
Vue.js中的组件系统
May 30 Javascript
vue-cli随机生成port源码的方法
Sep 02 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字符串 ==比较运算符的副作用
2009/10/21 PHP
php实现的支持断点续传的文件下载类
2014/09/23 PHP
详解PHP序列化反序列化的方法
2015/10/27 PHP
PHP+Apache环境中如何隐藏Apache版本
2017/11/24 PHP
使用javascript访问XML数据的实例
2006/12/27 Javascript
总结AJAX相关JS代码片段和浏览器模型
2007/08/15 Javascript
网页自动跳转代码收集
2009/09/27 Javascript
菜鸟javascript基础资料整理3 正则
2010/12/06 Javascript
JavaScript继承基础讲解(原型链、借用构造函数、混合模式、原型式继承、寄生式继承、寄生组合式继承)
2014/08/16 Javascript
asp.net中oracle 存储过程(图文)
2015/08/12 Javascript
使用jQuery.form.js/springmvc框架实现文件上传功能
2016/05/12 Javascript
JS实现关键词高亮显示正则匹配
2018/06/22 Javascript
基于VUE实现的九宫格抽奖功能
2018/09/30 Javascript
vue中的inject学习教程
2019/04/24 Javascript
常见的浏览器存储方式(cookie、localStorage、sessionStorage)
2019/05/07 Javascript
javascript二维数组和对象的深拷贝与浅拷贝实例分析
2019/10/26 Javascript
JavaScript 实现HTML DOM增删改查操作的常见方法详解
2020/01/04 Javascript
WebPack工具运行原理及入门教程
2020/12/02 Javascript
Python中threading模块join函数用法实例分析
2015/06/04 Python
全面了解Python环境配置及项目建立
2016/06/30 Python
Python获取指定文件夹下的文件名的方法
2018/02/06 Python
python爬虫基础教程:requests库(二)代码实例
2019/04/09 Python
Python机器学习算法库scikit-learn学习之决策树实现方法详解
2019/07/04 Python
python实现倒计时小工具
2019/07/29 Python
python2使用bs4爬取腾讯社招过程解析
2019/08/14 Python
详解Python文件修改的两种方式
2019/08/22 Python
Python环境搭建过程从安装到Hello World
2021/02/05 Python
奥地利领先的在线药房:SHOP APOTHEKE
2019/10/07 全球购物
建筑专业自我鉴定
2013/10/22 职场文书
班主任工作年限证明
2014/01/12 职场文书
行政监察建议书
2014/05/19 职场文书
代办出身证明书
2014/10/21 职场文书
民主评议政风行风活动心得体会
2014/10/29 职场文书
2014年党风廉政工作总结
2014/12/03 职场文书
2015试用期转正工作总结
2014/12/12 职场文书
深入浅出讲解Java8函数式编程
2022/01/18 Java/Android