angular custom Element 自定义web component
angular 自定义web组件:
首先创建一个名为myCustom的组件。
引入app.module:
...
import {customComponent} from ' ./myCustom.component'; @NgModule({
declarations:[AppComponent,customComponent],
entryComponents:[customComponent]
....
}) export class AppModule{}
全局注册:
app.component:
import { Component,Injector} from '@angular/core';
import { createCustomElement} from '@angular/elements';
import {customComponents} from './myCustom.component'; @Component({ })
export class AppComponent{
constructor(private injector:Injector){
const customElementRef=createCustomElement(createCustomElement,{injector});
customElements.define('my-test',customElementRef); }
}
Ok,这样完成了'my-test'的全局,接下来可以像是用web component那样使用它了.
进入我们的主html:
Index.html
<html> <body>
<app-root></app-root>
<!-- 这是angular程序主引导接口 --> <my-test></my-test>
<!-- 全局注册的angular组件可以直接放在html里使用-->
</body> </html>
注意:
1. 放在app-root前面,效果是一样的。没有先后之分。
2. my-test的注入依赖,继承自app.component。你可以放心地在里面使用。
3. 作为web component 时,input不能接受变量。output不生效。。
问:
既然angular可以注册全局web component ,那么是否能结合react使用?
当然可以,接着上面的列子:
<html> <body>
<app-root></app-root>
<!-- 这是angular程序主引导接口 --> <my-test></my-test>
<!-- 全局注册的angular组件可以直接放在html里使用-->
<div id='react-app'></div>
</body>
<!-- 引入react.js --> <script src="https://unpkg.com/react@16/umd/react.development.js"></script>
<script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
<script src="https://unpkg.com/babel-standalone@6.15.0/babel.min.js"></script> <script type='text/babel'>
class ReactApp extends React.Component{
state={
showAngularComponent:false
}
render(){
const state=this.state;
return (
<div>
{state.showAngularComponent?<my-test></my-test>:null}
<button onClick={()=>this.setState({showAngularComponent:!state.showAngularComponent})}>toggle</button>
</div>
) }
} ReactDOM.render(<ReactApp/>,document.getElementById('react-app')) </script>
</html>
完美运行。
angular component 注册为web component 的技术。让angular的灵活性瞬间暴涨!但是那么有必要结合react使用吗?
当然是得依你的业务要求来定了,比如你的领导强行指定你使用react。
但是当你面对一些功能复杂的组件或页面开发时,react的相对低下的效率,以及大面积重复计算、缓慢的性能,可能让你非常苦恼。此时或许你能考虑下用angular便捷迅速地为你的react项目提供一个高性能且稳定的组件。
加上ng6再一次减肥,核心库如同jquery一样的大小,angular的未来,一片光明。
---
使用custom element之前:
安装webcomponents填充库:
npm install webcomponents/webcomponentsjs --save;
polyfill.ts中引入:
import '@webcomponents/webcomponentsjs/custom-elements-es5-adapter.js'
angular custom Element 自定义web component的更多相关文章
- 示例可重用的web component方式组织angular应用模块
在online web应用中,经常有这样的需求,能够让用户通过浏览器来输入代码,同时能够根据不同的代码来做语法高亮.大家已知有很多相应的javascript库来实现语法高亮的功能,比如codemirr ...
- Vue报错之" [Vue warn]: Unknown custom element: <wzwzihello> - did you register the component correctly? For recursive components, make sure to provide the "name" option."
一.报错截图 [Vue warn]: Unknown custom element: <wzwzihello> - did you register the component corre ...
- vue报错[Vue warn]: Unknown custom element: <router-Link> - did you register the component correctly? For recursive components, make sure to provide the "name" option.
vue浏览器报错,如下 vue.runtime.esm.js?2b0e:619 [Vue warn]: Unknown custom element: <router-Link> - di ...
- web components & publish custom element & npm
web components & publish custom element & npm https://www.webcomponents.org/publish Polymer ...
- [Vue warn]: Unknown custom element: <sapn> - did you register the component correctly? For recursive components, make sure to provide the "name" option. found in ---> <Evaluate> at src/views/index/
关于vue报错: [Vue warn]: Unknown custom element: <sapn> - did you register the component correctly ...
- WebComponent魔法堂:深究Custom Element 之 从过去看现在
前言 说起Custom Element那必然会想起那个相似而又以失败告终的HTML Component.HTML Component是在IE5开始引入的新技术,用于对原生元素作功能"增强& ...
- Web Component探索
概述 各种网站往往需要一些相同的模块,比如日历.调色板等等,这种模块就被称为“组件”(component).Web Component就是网页组件式开发的技术规范. 采用组件进行网站开发,有很多优点. ...
- WebComponent魔法堂:深究Custom Element 之 标准构建
前言 通过<WebComponent魔法堂:深究Custom Element 之 面向痛点编程>,我们明白到其实Custom Element并不是什么新东西,我们甚至可以在IE5.5上定 ...
- Web Component
前言 Web Component不是新东西,几年前的技术,但是受限于浏览器兼容性,一直没有大规模应用在项目里,直到现在(2018年年末),除IE仍不支持之外,其它主流浏览器都支持Web Compone ...
随机推荐
- Oracle Schema Objects——Tables——Table Compression
Oracle Schema Objects Table Compression 表压缩 The database can use table compression to reduce the amo ...
- FineUI 获取x_state并解析
public JObject PostBackStates() { JObject xState = null; if (Page.IsPostBack) { string state = HttpC ...
- HTTP协议及其POST与GET操作差异 & C#中如何使用POST、GET等
转自: http://www.cnblogs.com/skynet/archive/2010/05/18/1738301.html 引言 HTTP协议我想任何IT人士都耳熟能详了,大家都能说出个所以然 ...
- python array
python中通常情况下for循环会枚举各个元素不会访问下标,例如: l = [1,2,4,6] for val in l: print l 但是有时候我们会需要在便利数组的同时访问下标,这时候可以借 ...
- 查看python对象的属性
在Python语言中,有些库在使用时,在网络上找到的文档不全,这就需要查看相应的Python对象是否包含需要的函数或常量.下面介绍一下,如何查看Python对象中包含哪些属性,如成员函数.变量等,其中 ...
- Compilation failed: internal java compiler error
在Idea中编译时出现这个错误:Error:java: Compilation failed: internal java compiler error. Information:Using java ...
- 转!! 关于jsp编码设置 <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
我们在写jsp页面的时候经常会在页面头部使用如下代码: <%@ page language="java" contentType="text/html; chars ...
- BZOJ2648: SJY摆棋子&&2716: [Violet 3]天使玩偶
BZOJ2648: SJY摆棋子 BZOJ2716: [Violet 3]天使玩偶 BZOJ氪金无极限... 其实这两道是同一题. 附上2648的题面: Description 这天,SJY显得无聊. ...
- Python基础教程-Dict和Set
Python的dict Python内置了字典:dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度. 比如,要根据同学的名字查找对应的 ...
- mysql建立索引 删除索引
建立索引 1.添加PRIMARY KEY(主键索引) mysql>ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` ) 2.添加UNIQUE ...