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的更多相关文章

  1. 示例可重用的web component方式组织angular应用模块

    在online web应用中,经常有这样的需求,能够让用户通过浏览器来输入代码,同时能够根据不同的代码来做语法高亮.大家已知有很多相应的javascript库来实现语法高亮的功能,比如codemirr ...

  2. 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 ...

  3. 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 ...

  4. web components & publish custom element & npm

    web components & publish custom element & npm https://www.webcomponents.org/publish Polymer ...

  5. [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 ...

  6. WebComponent魔法堂:深究Custom Element 之 从过去看现在

    前言  说起Custom Element那必然会想起那个相似而又以失败告终的HTML Component.HTML Component是在IE5开始引入的新技术,用于对原生元素作功能"增强& ...

  7. Web Component探索

    概述 各种网站往往需要一些相同的模块,比如日历.调色板等等,这种模块就被称为“组件”(component).Web Component就是网页组件式开发的技术规范. 采用组件进行网站开发,有很多优点. ...

  8. WebComponent魔法堂:深究Custom Element 之 标准构建

    前言  通过<WebComponent魔法堂:深究Custom Element 之 面向痛点编程>,我们明白到其实Custom Element并不是什么新东西,我们甚至可以在IE5.5上定 ...

  9. Web Component

    前言 Web Component不是新东西,几年前的技术,但是受限于浏览器兼容性,一直没有大规模应用在项目里,直到现在(2018年年末),除IE仍不支持之外,其它主流浏览器都支持Web Compone ...

随机推荐

  1. Mindjet MindManager 出现Runtime Error解决方案

    Mindjet MindManager文件打开报错怎么解决?文件打开后提示Runtime Error!Program:C:\Program Files\MindManager 9\Mindmanage ...

  2. 兼容获取元素当前样式 currentStyle || getComputedStyle

    function getStyle(ele, attr) { return ele.currentStyle ? ele.currentStyle[attr] : window.getComputed ...

  3. 初识python(二)

    初识python(二) 1.变量 变量:把程序运行的中间结果临时的存在内存里,以便后续的代码调用. 1.1 声明变量: #!/usr/bin/env python # -*- coding: utf- ...

  4. Redis二(Hash操作)

    Hash操作 Hash操作,redis中Hash在内存中的存储格式如下图: hset(name, key, value) 1 2 3 4 5 6 7 8 9 # name对应的hash中设置一个键值对 ...

  5. s5_day11作业

    # 1 文件内容如下,标题为:姓名,性别,年纪,薪资 # # egon male 18 3000 # alex male 38 30000 # wupeiqi female 28 20000 # yu ...

  6. centos6.5系统python2.6升级到python3.6

    1.安装必备的工具 wget:yum install wget gcc:yum install gcc zlib zlib-devel: yum install zlib zlib-devel -y ...

  7. Ajax传地址URL编码格式

    当我们用Ajax传递路径的时候,有可能会出错,尤其是路径中有汉字的时候,传递的路径与接收的路径不同.解决方法:在传递路径的时候对路径编码,接收的时候解码存入数据库. 如: <!DOCTYPE h ...

  8. URAL - 1901 Space Elevators

    题目: Nowadays spaceships are never launched from the Earth's surface. There is a huge spaceport place ...

  9. [MySQL] 实现树形的遍历(关于多级菜单栏以及多级上下部门的查询问题)

    前言:         关于多级别菜单栏或者权限系统中部门上下级的树形遍历,oracle中有connect by来实现,MySQL没有这样的便捷途径,所以MySQL遍历数据表是我们经常会遇到的头痛问题 ...

  10. boot空间不足,删除Ubuntu旧内核

    0 Problem 今天打开电脑的时候ubuntu提示boot空间不足.查了资料,原来Ubuntu的自动升级并没有删除系统的旧内核,于是boot下旧的内核文件越积越多,最后就满了. 1 Solutio ...