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 相关文章推荐
showModalDialog 和 showModelessDialog
Jan 22 Javascript
JavaScript Date对象使用总结
May 14 Javascript
js中使用DOM复制(克隆)指定节点名数据到新的XML文件中的代码
Jul 27 Javascript
浅析Cookie中的Path与domain
Dec 18 Javascript
如何将网页表格内容导入excel
Feb 18 Javascript
js拖拽一些常见的思路方法整理
Mar 19 Javascript
技术男用来对妹子表白的百度首页
Jul 23 Javascript
node.js中的querystring.unescape方法使用说明
Dec 10 Javascript
基于JSON数据格式详解
Aug 31 Javascript
react build 后打包发布总结
Aug 24 Javascript
vue通过cookie获取用户登录信息的思路详解
Oct 30 Javascript
React Ant Design树形表格的复杂增删改操作
Nov 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获取网址的顶级域名函数代码
2012/09/24 PHP
无需重新编译php加入ftp扩展的解决方法
2013/02/07 PHP
PHP中func_get_args(),func_get_arg(),func_num_args()的区别
2013/09/30 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十三)
2014/06/26 PHP
thinkphp 字母函数详解T/I/N/D/M/A/R/U
2017/04/03 PHP
PDO::errorCode讲解
2019/01/28 PHP
一个无限级XML绑定跨框架菜单(For IE)
2007/01/27 Javascript
Javascript异步编程的4种方法让你写出更出色的程序
2013/01/17 Javascript
javascript完美拖拽的实现方法
2013/09/29 Javascript
JS中数组Array的用法示例介绍
2014/02/20 Javascript
JSON中双引号的轮回使用过程中一定要小心
2014/03/05 Javascript
js创建一个input数组并绑定click事件的方法
2014/06/12 Javascript
jquery中map函数遍历数组用法实例
2015/05/18 Javascript
JavaScript中的各种操作符使用总结
2016/05/26 Javascript
Javascript 数组去重的方法(四种)详解及实例代码
2016/11/24 Javascript
jQuery菜单实例(全选,反选,取消)
2017/08/28 jQuery
详解vue-cli本地环境API代理设置和解决跨域
2017/09/05 Javascript
Promise.all中对于reject的处理方法
2018/08/01 Javascript
微信小程序学习笔记之文件上传、下载操作图文详解
2019/03/29 Javascript
Vue+ElementUI项目使用webpack输出MPA的方法
2019/08/27 Javascript
vue分页插件的使用方法
2019/12/25 Javascript
vue $mount 和 el的区别说明
2020/09/11 Javascript
[46:47]完美世界DOTA2联赛PWL S2 FTD vs Magma 第二场 11.20
2020/11/23 DOTA
Python 如何访问外围作用域中的变量
2016/09/11 Python
python3实现全角和半角字符转换的方法示例
2017/09/21 Python
python实现美团订单推送到测试环境,提供便利操作示例
2019/08/09 Python
python自动分箱,计算woe,iv的实例代码
2019/11/22 Python
使用BeautifulSoup4解析XML的方法小结
2020/12/07 Python
使用Python爬虫爬取小红书完完整整的全过程
2021/01/19 Python
全球度假村:Club Med
2017/11/27 全球购物
系统管理员的职责包括那些?管理的对象是什么?
2016/09/20 面试题
国外软件测试工程师面试题
2016/12/09 面试题
2015新年寄语大全
2014/12/08 职场文书
租车协议书
2015/01/27 职场文书
质量保证书格式模板
2015/02/27 职场文书
Java多线程并发FutureTask使用详解
2022/06/28 Java/Android