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 相关文章推荐
Extjs学习笔记之八 继承和事件基础
Jan 08 Javascript
JQuery live函数
Dec 24 Javascript
javascript如何创建表格(javascript绘制表格的二种方法)
Dec 10 Javascript
网页右侧悬浮滚动在线qq客服代码示例
Apr 28 Javascript
原生js实现可拖拽效果
Feb 28 Javascript
JSONP基础知识详解
Mar 19 Javascript
javascript实现二叉树的代码
Jun 08 Javascript
AngularJS中ng-options实现下拉列表的数据绑定方法
Aug 13 Javascript
浅谈vue项目4rs vue-router上线后history模式遇到的坑
Sep 27 Javascript
简单了解Ajax表单序列化的实现方法
Jun 14 Javascript
jquery分页优化操作实例分析
Aug 23 jQuery
Vue实现图片与文字混输效果
Dec 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学习之 循环结构实现代码
2011/06/09 PHP
什么是PHP文件?如何打开PHP文件?
2017/06/27 PHP
asp 取文本框名称代码
2008/12/02 Javascript
cnblogs TagCloud基于jquery的实现代码
2010/06/11 Javascript
解决jQuery插件tipswindown与hintbox冲突
2010/11/05 Javascript
javaScript同意等待代码实现心得
2011/01/01 Javascript
jQuery 源码分析笔记(6) jQuery.data
2011/06/08 Javascript
开发 Internet Explorer 右键功能表(ContextMenu)
2013/07/03 Javascript
jquery右下角弹出提示框示例代码
2013/10/08 Javascript
实用框架(iframe)操作代码
2014/10/23 Javascript
微信企业号开发之微信考勤百度地图定位
2015/09/11 Javascript
JavaScript面向对象之私有静态变量实例分析
2016/01/14 Javascript
jQuery技巧之让任何组件都支持类似DOM的事件管理
2016/04/05 Javascript
JS如何设置iOS中微信浏览器的title
2016/11/22 Javascript
在vue-cli脚手架中配置一个vue-router前端路由
2017/07/03 Javascript
提高Node.js性能的应用技巧分享
2017/08/10 Javascript
深入浅出webpack之externals的使用
2017/12/04 Javascript
vue项目实现表单登录页保存账号和密码到cookie功能
2018/08/31 Javascript
Vue中 v-if 和v-else-if页面加载出现闪现的问题及解决方法
2018/10/12 Javascript
原生js实现公告滚动效果
2021/01/10 Javascript
[54:09]RNG vs Liquid 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.23
2019/09/05 DOTA
详细解读Python的web.py框架下的application.py模块
2015/05/02 Python
浅谈使用Python变量时要避免的3个错误
2017/10/30 Python
python集合常见运算案例解析
2019/10/17 Python
keras打印loss对权重的导数方式
2020/06/10 Python
Tensorflow中批量读取数据的案列分析及TFRecord文件的打包与读取
2020/06/30 Python
Python3爬虫中关于Ajax分析方法的总结
2020/07/10 Python
彻底搞懂python 迭代器和生成器
2020/09/07 Python
python批量检查两个对应的txt文件的行数是否一致的实例代码
2020/10/31 Python
探究 canvas 绘图中撤销(undo)功能的实现方式详解
2018/05/17 HTML / CSS
写一个方法1000的阶乘
2012/11/21 面试题
节能宣传周活动总结
2014/05/08 职场文书
个性车贴标语
2014/06/24 职场文书
护士个人年终总结
2015/02/13 职场文书
简历自我评价优缺点
2015/03/11 职场文书
一波干货,会议主持词开场白范文
2019/05/06 职场文书