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 相关文章推荐
javascript DOM编程实例(智播客学习)
Nov 23 Javascript
jQuery简单验证上传文件大小及类型的方法
Jun 02 Javascript
JQuery Ajax WebService传递参数的简单实例
Nov 02 Javascript
微信小程序 使用canvas制作K线实例详解
Jan 12 Javascript
vue-resource 拦截器使用详解
Feb 21 Javascript
jQuery动态追加页面数据以及事件委托详解
May 06 jQuery
JQuery EasyUI的一些常用组件
Jul 12 jQuery
AngularJS service之select下拉菜单效果
Jul 28 Javascript
input 标签实现输入框带提示文字效果(两种方法)
Oct 09 Javascript
在vue项目创建的后初始化首次使用stylus安装方法分享
Jan 25 Javascript
javascript局部自定义鼠标右键菜单
Dec 08 Javascript
简单聊聊Vue中的计算属性和属性侦听
Oct 05 Vue.js
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多个进程配合redis的有序集合实现大文件去重
2019/03/06 PHP
PHP使用递归按层级查找数据的方法
2019/11/10 PHP
基于jquery实现的鼠标滑过按钮改变背景图片
2011/07/15 Javascript
33个优秀的 jQuery 图片展示插件分享
2012/03/14 Javascript
javascript中将Object转换为String函数代码 (json str)
2012/04/29 Javascript
javascript实例--教你实现扑克牌洗牌功能
2014/05/15 Javascript
js图片滚动效果时间可随意设定当鼠标移上去时停止
2014/06/26 Javascript
IE下使用jQuery重置iframe地址时内存泄露问题解决办法
2015/02/05 Javascript
基于javascript实现动态时钟效果
2020/08/18 Javascript
浅析Javascript中bind()方法的使用与实现
2016/05/30 Javascript
jQuery 3.0十大新特性最终版发布
2016/07/14 Javascript
AngularJS自定义插件实现网站用户引导功能示例
2016/11/07 Javascript
简单谈谈Javascript函数中的arguments
2017/02/09 Javascript
详解AngularJS 路由 resolve用法
2017/04/24 Javascript
前端防止用户重复提交js实现代码示例
2018/09/07 Javascript
微信小程序websocket聊天室的实现示例代码
2019/02/12 Javascript
python求pi的方法
2014/10/08 Python
关于你不想知道的所有Python3 unicode特性
2014/11/28 Python
详解Python中for循环的使用方法
2015/05/14 Python
Python自动调用IE打开某个网站的方法
2015/06/03 Python
Python使用win32com实现的模拟浏览器功能示例
2017/07/13 Python
Python爬虫实现爬取京东手机页面的图片(实例代码)
2017/11/30 Python
详解python的sorted函数对字典按key排序和按value排序
2018/08/10 Python
python学习开发mock接口
2019/04/28 Python
使用python检查yaml配置文件是否符合要求
2020/04/09 Python
如何在django中实现分页功能
2020/04/22 Python
Python+unittest+requests 接口自动化测试框架搭建教程
2020/10/09 Python
HTML5中input输入框默认提示文字向左向右移动的示例代码
2020/09/10 HTML / CSS
澳大利亚先进的皮肤和激光诊所购物网站:Soho Skincare
2018/10/15 全球购物
银行门卫岗位职责
2013/12/29 职场文书
会计与出纳自荐书范文
2014/03/16 职场文书
向国旗敬礼活动小结
2014/09/27 职场文书
就业推荐表导师评语
2014/12/31 职场文书
2016年119消防宣传日活动总结
2016/04/05 职场文书
Python编程中内置的NotImplemented类型的用法
2022/03/23 Python
Ruby处理YAML和json数据
2022/04/18 Ruby