React中如何引入Angular组件详解


Posted in Javascript onAugust 09, 2018

前言

为了在我的编辑器中使用 Angular,我用 Angular 编写了一个重命名功能。而为了使用它,我得再次使用一次 customEvent ,而在这个微前端架构的系统中,其事件通讯机制已经相当的复杂。在这部分的代码进一步恶化之前,我得尝试有没有别的方式。于是,我想到了之前在其它组件中使用的 Web Components 技术,而 Angular 6 正好可以支持。

下面话不多说了,来一起看看详细的介绍吧

HTML 中引入 Web Components

我所需要做的事情也相当的简单,只需要将我的组件注册为一个 customElements,稍微改一下 app.module.ts 文件。在这种情况之下,我们就可以构建出独立于框架的组件。

如下是原始的 module 文件:

@NgModule({
 declarations: [AppComponent],
 imports: [BrowserModule],
 bootstrap: [AppComponent]
})
export class AppModule { }

如下则是新的 module 文件:

@NgModule({
 declarations: [InteractBar],
 imports: [BrowserModule],
 entryComponents: [InteractBar]
})
export class AppModule {
 constructor(private injector: Injector) {
 const interactBar = createCustomElement(InteractBar, {injector});
 customElements.define('interact-bar', interactBar);
 }
}

然后,只需要就可以在 HTML 中传递参数: <interact-bar filename="phodal.md"></interact-bar> ,或者监听对应的 @Output 事件:

const bar = document.querySelector('interact-bar');
bar.addEventListener('action', (event: any) => {
 ...
})

事实证明,使用 Angular 构建的 Web Components 组件是可以用的。于是,我便想,不如在 React 中引入 Angular 组件吧。

React 中引入 Angular 组件

于是,便使用 create-react-app 创建了一个 DEMO,然后引入组件:

<div className="App">
 <header className="App-header">
 <img src={logo} className="App-logo" alt="logo" />
 <h1 className="App-title">Welcome to React</h1>
 </header>
 <p className="App-intro">
 To get started, edit <code>src/App.js</code> and save to reload.
  <interact-bar filename="phodal.com" onAction={this.action}></interact-bar>
 </p>
</div>

嗯,it works。至少 filename 参数可以成功地传递到 Angular 代码中,而 action 在当前似乎还不行。但是毫无疑问,它在未来是可用的。

Demo 见: https://phodal.github.io/wc-angular-demo/

Repo 见: https://github.com/phodal/wc-angular-demo

这个时候,我遇到了一个问题,我使用 Angular 构建的这个组件,大概是有 257kb。这个大小的组件,但是有点恐怖。

Web Components 框架构建组件

在那些微前端相关的文章中,我们指出类似于 Stencil 的形式,将组件直接构建成 Web Components 形式的组件,随后在对应的诸如,如 React 或者 Angular 中直接引用。

如下是一个使用 Stencil 写的 Web Components 的例子:

@Component({
 tag: 'phodit-header',
 styleUrl: 'phodit-header.css'
})
export class PhoditHeader {
 @State() showCloseHeader = false;

 componentDidLoad() {...}
 handleClick() {...}

 render() {
 if (this.showCloseHeader) {...}
 return (<div></div>);
 }
}

使用它构建出来的组件,大概可以在 30kb 左右的大小。

不论是不是一个经量级的方案,但是它至少证明了组件复用的可行性。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
jQuery 研究心得 取得属性的值
Nov 30 Javascript
通过Javascript将数据导出到外部Excel文档的函数代码
Jun 15 Javascript
JQuery为页面Dom元素绑定事件及解除绑定方法
Apr 23 Javascript
js调试系列 断点与动态调试[基础篇]
Jun 18 Javascript
jQuery实现点击后标记当前菜单位置(背景高亮菜单)效果
Aug 22 Javascript
JS实现双击屏幕滚动效果代码
Oct 28 Javascript
详解JavaScript表单验证(E-mail 验证)
Mar 31 Javascript
jQuery实现全选、反选和不选功能
Aug 16 jQuery
Vue中的ref作用详解(实现DOM的联动操作)
Aug 21 Javascript
JavaScript重复元素处理方法分析【统计个数、计算、去重复等】
Dec 14 Javascript
Vue.js中的computed工作原理
Mar 22 Javascript
vue 实现移动端键盘搜索事件监听
Nov 06 Javascript
jQuery 实现批量提交表格多行数据的方法
Aug 09 #jQuery
详解js的视频和音频采集
Aug 09 #Javascript
Angular中的ng-template及angular 使用ngTemplateOutlet 指令的方法
Aug 08 #Javascript
深入理解Promise.all
Aug 08 #Javascript
vue js秒转天数小时分钟秒的实例代码
Aug 08 #Javascript
vue devtools的安装与使用教程
Aug 08 #Javascript
jQuery AJAX 方法success()后台传来的4种数据详解
Aug 08 #jQuery
You might like
咖啡机如何保养和日常清洁?
2021/03/03 冲泡冲煮
PHP中4种常用的抓取网络数据方法
2015/06/04 PHP
详解WordPress中简码格式标签编写的基本方法
2015/12/22 PHP
PHP获取当前日期及本周一是几月几号的方法
2017/03/28 PHP
详谈php中 strtr 和 str_replace 的效率问题
2017/05/14 PHP
PHP数据源架构模式之表入口模式实例分析
2020/01/23 PHP
js字符编码函数区别分析
2008/06/05 Javascript
IE6下js通过css隐藏select的一个bug
2010/08/16 Javascript
检测input每次的输入是否合法遇到汉字输入就有问题
2012/05/23 Javascript
基于jquery的DIV随滚动条滚动而滚动的代码
2012/07/20 Javascript
11个用于提高排版水平的基于jquery的文字效果插件
2012/09/14 Javascript
$.get获取一个文件的内容示例代码
2013/09/11 Javascript
创建、调用JavaScript对象的方法集锦
2014/12/24 Javascript
js实现获取当前时间是本月第几周的方法
2015/08/11 Javascript
Jquery元素追加和删除的实现方法
2016/05/24 Javascript
浅谈JavaScript for循环 闭包
2016/06/22 Javascript
jQuery EasyUI Tab 选项卡问题小结
2016/08/16 Javascript
js时间控件只显示年月
2017/01/08 Javascript
JS实现的简单表单验证功能示例
2017/10/13 Javascript
JavaScript面向对象程序设计创建对象的方法分析
2018/08/13 Javascript
微信小程序iOS下拉白屏晃动问题解决方案
2019/10/12 Javascript
js实现录音上传功能
2019/11/22 Javascript
微信小程序的引导页实现代码
2020/06/24 Javascript
[03:43]2014DOTA2西雅图国际邀请赛 newbee战队巡礼
2014/07/07 DOTA
[13:55]Newbee vs Team Spirit
2018/06/07 DOTA
python3实现短网址和数字相互转换的方法
2015/04/28 Python
几个适合python初学者的简单小程序,看完受益匪浅!(推荐)
2019/04/16 Python
pytorch中交叉熵损失(nn.CrossEntropyLoss())的计算过程详解
2020/01/02 Python
荷兰天然和有机产品网上商城:BigGreenSmile.nl
2020/07/26 全球购物
英国奢侈品在线精品店:Hervia
2020/09/03 全球购物
个人思想理论学习的自我鉴定
2013/11/30 职场文书
廉洁家庭事迹材料
2014/05/15 职场文书
经营管理策划方案
2014/05/22 职场文书
店铺转让协议书
2014/12/02 职场文书
幼儿园感谢信
2015/01/21 职场文书
2015年艾滋病防治工作总结
2015/05/22 职场文书