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 相关文章推荐
jQuery 源码分析笔记(7) Queue
Jun 19 Javascript
用dtree实现树形菜单 dtree使用说明
Oct 17 Javascript
AngularJS入门教程之迭代器过滤详解
Aug 18 Javascript
解决jQuery ajax动态新增节点无法触发点击事件的问题
May 24 jQuery
js闭包学习心得总结
Apr 17 Javascript
微信小程序中使用ECharts 异步加载数据的方法
Jun 27 Javascript
js根据需要计算数组中重复出现某个元素的个数
Jan 18 Javascript
Vue项目中配置pug解析支持
May 10 Javascript
vuex根据不同的用户权限展示不同的路由列表功能
Sep 20 Javascript
原生js实现商品筛选功能
Oct 28 Javascript
Vue export import 导入导出的多种方式与区别介绍
Feb 12 Javascript
vue实现列表拖拽排序的功能
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 DOS攻击实现代码(附如何防范)
2012/05/29 PHP
php集成套件服务器xampp安装使用教程(适合第一次玩PHP的新手)
2015/06/03 PHP
详解PHP处理密码的几种方式
2016/11/30 PHP
详解yii2使用多个数据库的案例
2017/06/16 PHP
Eclipse PHPEclipse 配置的具体步骤
2017/08/08 PHP
获取网站跟路径的javascript代码(站点及虚拟目录)
2009/10/20 Javascript
javascript 回调函数详解
2014/11/11 Javascript
jQuery中nextAll()方法用法实例
2015/01/07 Javascript
jQuery实现仿QQ空间装扮预览图片的鼠标提示效果代码
2015/10/30 Javascript
js clearInterval()方法的定义和用法
2015/11/11 Javascript
JavaScript 七大技巧(二)
2015/12/13 Javascript
Nodejs全局安装和本地安装的不同之处
2016/07/04 NodeJs
AngularJS深入探讨scope,继承结构,事件系统和生命周期
2016/11/02 Javascript
jQuery select自动选中功能实现方法分析
2016/11/28 Javascript
JavaScript实现拖拽元素对齐到网格(每次移动固定距离)
2016/11/30 Javascript
纯JS单页面赛车游戏制作代码分享
2017/03/03 Javascript
详解组件库的webpack构建速度优化
2018/06/18 Javascript
JavaScript设计模式之缓存代理模式原理与简单用法示例
2018/08/07 Javascript
js继承的这6种方式!(上)
2019/04/23 Javascript
一步一步实现Vue的响应式(对象观测)
2019/09/02 Javascript
python中的字典详细介绍
2014/09/18 Python
PyQT实现多窗口切换
2018/04/20 Python
pytorch 把MNIST数据集转换成图片和txt的方法
2018/05/20 Python
Python3中详解fabfile的编写
2018/06/24 Python
Linux下Pycharm、Anaconda环境配置及使用踩坑
2018/12/19 Python
如何使用python写截屏小工具
2020/09/29 Python
如何用python写个模板引擎
2021/01/14 Python
使用CSS3制作一个简单的进度条(demo)
2017/05/23 HTML / CSS
马歇尔耳机官网:Marshall Headphones
2020/02/04 全球购物
经典的班主任推荐信
2013/10/28 职场文书
美术教师自我鉴定
2014/02/12 职场文书
2014年单位植树节活动方案
2014/03/23 职场文书
2014年医院十一国庆节活动方案
2014/09/15 职场文书
上课迟到检讨书300字
2014/10/15 职场文书
2016年企业安全生产月活动总结
2016/04/06 职场文书
MongoDB支持的索引类型
2022/04/11 MongoDB