Angular 封装并发布组件的方法示例


Posted in Javascript onApril 19, 2018

一、封装组件

作为入门,这是一个非常简单的demo,但核心的接收使用者的输入@Input(),以及返回数据给使用者@Output()都实现了,所以有一定的借鉴意义。

目录结构:(部分目录不是框架中自动生成,二是后期添加,按照步骤进行即可。)

Angular 封装并发布组件的方法示例

具体代码:

html:(search.component.html)

<input type="text" class="form-control" 
    #info placeholder="{{information}}" > 
   
<button type="button" class="btn btn-default" 
    (click)="query(info.value);">查询</button> 
 
 
css:(search.component.css) 
 
.form-control{ 
 float: left; 
 width: 70%; 
} 
 
.btn btn-default{ 
 background-color: #41ABE9; 
}

ts:(search.component.ts)

import {Component, OnInit, Input, Output, EventEmitter} from '@angular/core'; 
@Component({ 
 selector: 'app-search', 
 templateUrl: './search.component.html', 
 styleUrls: ['./search.component.css'] 
}) 
export class SearchComponent implements OnInit { 
 @Input() information: string;   
 @Input() url: string; 
 dataUrl: string; 
 @Output() editData = new EventEmitter<any>(); 
 
 constructor() { } 
 ngOnInit() { 
 } 
 query(info: string) { 
  this.dataUrl = this.url + '/' + info; 
  this.editData.emit(this.dataUrl); 
 } 
}

解释:@Input,接收信息。如information可以接收Html中的{{information}}的值

@Output是输出。即引用组件化的人可以拿到editData的返回值。

module:(search.module.ts)

import {SearchComponent} from './search.component' ; 
import {CommonModule} from '@angular/common'; 
import { NgModule } from '@angular/core'; 
import { FormsModule } from '@angular/forms'; 
import { HttpModule } from '@angular/http'; 
 
@NgModule({ 
 declarations: [ 
  SearchComponent 
 ], 
 imports: [ 
  CommonModule, 
  FormsModule, 
  HttpModule, 
 ], 
 providers: [], 
 exports: [SearchComponent], 
}) 
export class SearchModule { }

至此组件完成,可以通过在app.component.html中引入如下看看效果:

<h1> 
 {{information}} 
 {{dataUrl}} 
</h1> 
<div style="width: 300px;padding-left: 5px"> 
<app-search [information]="information" [url]="url" (editData)="query($event)"></app-search> 
</div>

对应app.component.ts中需要定义:

import { Component } from '@angular/core';  
@Component({ 
 selector: 'app-root', 
 templateUrl: './app.component.html', 
 styleUrls: ['./app.component.css'] 
}) 
export class AppComponent { 
 information = '输入班级名称'; 
 url= 'Class/find'; 
 dataUrl: string; 
 query(info: any) { 
  this.dataUrl = info; 
 } 
}

点击查询后效果如:

Angular 封装并发布组件的方法示例

二、发布,供大家引用

1、注册npm账号:

地址:https://www.npmjs.com

2、手动或者命令创建package.json文件

内容包括:

Angular 封装并发布组件的方法示例

3、手动或命令创建index.js文件

在添加内容前,我们调整组件的目录结构,如最上图所示,这是规范的目录结构,调整好后,添加index.js内容:

export * from './lib/search.module';

4、手动或命令创建index.d.ts文件

export {SearchModule} from './search.module';

5、Ctrl+Shift+右击(在search组件目录下)

    运行:npm login

    输入账号、密码、邮箱

    登录成功后:运行npm publish

    至此发布完成。

三、引用者调用:

1、Ctrl+Shift+右击(项目根目录)

cnpm install ng-itoo-search

2、引入到项目中

自己的Module中

Angular 封装并发布组件的方法示例

3、自己的Html中:

<app-search [information]="information" [url]="url " (editData)="query($event)"></app-search>

4、对应的ts中:

Angular 封装并发布组件的方法示例

注意:

Angular 封装并发布组件的方法示例

框中的url和ts中保持一致即可,并非必须写url,自己定义。

OK,现在完整的一个组件就开发、发布完成了。这样就可以让其他开发人员引用了。通过这样的封装,既可以实现代码的复用,又会减少项目打包的体积......是Angular的一大优点。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
分享一个asp.net pager分页控件
Jan 04 Javascript
from表单多个按钮提交用onclick跳转不同action
Apr 24 Javascript
javascript的数组和常用函数详解
May 09 Javascript
JS实现控制表格行内容垂直对齐的方法
Mar 30 Javascript
JQuery跳出each循环的方法
Apr 16 Javascript
动态生成的DOM不会触发onclick事件的原因及解决方法
Aug 06 Javascript
微信小程序 textarea 详解及简单使用方法
Dec 05 Javascript
JavaScript递归算法生成树形菜单
Aug 15 Javascript
微信小程序App生命周期详解
Jan 31 Javascript
vue.js中ref和$refs的使用及示例讲解
Aug 14 Javascript
js绘制一条直线并旋转45度
Aug 21 Javascript
浅谈JS的二进制家族
May 09 Javascript
angular第三方包开发整理(小结)
Apr 19 #Javascript
如何从零开始利用js手写一个Promise库详解
Apr 19 #Javascript
30分钟快速入门掌握ES6/ES2015的核心内容(下)
Apr 18 #Javascript
30分钟快速入门掌握ES6/ES2015的核心内容(上)
Apr 18 #Javascript
原生js实现拖拽功能基本思路详解
Apr 18 #Javascript
一个基于react的图片裁剪组件示例
Apr 18 #Javascript
JS实现对json对象排序并删除id相同项功能示例
Apr 18 #Javascript
You might like
什么是调频(FM)、调幅(AM)、短波(SW)、长波(LW)
2021/03/01 无线电
Yii实现多按钮保存与提交的方法
2014/12/03 PHP
jQuery Tools tab(幻灯片)
2012/07/14 Javascript
Javascript 多浏览器兼容总结(实战经验)
2013/10/30 Javascript
javascript跨浏览器的属性判断方法
2014/03/16 Javascript
js中各种类型的变量在if条件中是true还是false
2014/07/16 Javascript
jQuery网页版打砖块小游戏源码分享
2015/08/20 Javascript
javascript图片延迟加载实现方法及思路
2015/12/31 Javascript
浅析创建javascript对象的方法
2016/05/13 Javascript
jQuery使用deferreds串行多个ajax请求
2016/08/22 Javascript
node.js中module.exports与exports用法上的区别
2016/09/02 Javascript
AngularJS模板加载用法详解
2016/11/04 Javascript
JQuery 又谈ajax局部刷新
2017/11/27 jQuery
bootstrap tooltips在 angularJS中的使用方法
2019/04/10 Javascript
jQuery实现购物车全功能
2021/01/11 jQuery
[02:42]DOTA2城市挑战赛收官在即 四强之争风起云涌
2018/06/05 DOTA
Python中处理字符串之endswith()方法的使用简介
2015/05/18 Python
python实现简易通讯录修改版
2018/03/13 Python
使用Python的Django和layim实现即时通讯的方法
2018/05/25 Python
python画折线图的程序
2018/07/26 Python
python爬虫之线程池和进程池功能与用法详解
2018/08/02 Python
用python3教你任意Html主内容提取功能
2018/11/05 Python
Linux 修改Python命令的方法示例
2018/12/03 Python
解决PyCharm不运行脚本,而是运行单元测试的问题
2019/01/17 Python
python基于FTP实现文件传输相关功能代码实例
2019/09/28 Python
Python使用tkinter模块实现推箱子游戏
2019/10/08 Python
音频处理 windows10下python三方库librosa安装教程
2020/06/20 Python
Python在字符串中处理html和xml的方法
2020/07/31 Python
python 实现有道翻译功能
2021/02/26 Python
马来西亚最大的在线隐形眼镜商店:MrLens
2019/03/27 全球购物
您附近的水疗和健康场所:Spafinder(美国)
2019/07/05 全球购物
优秀教师获奖感言
2014/01/31 职场文书
导游词之神仙居景区
2019/11/15 职场文书
解析CSS 提取图片主题色功能(小技巧)
2021/05/12 HTML / CSS
MySql 8.0及对应驱动包匹配的注意点说明
2021/06/23 MySQL
Redis如何使用乐观锁(CAS)保证数据一致性
2022/03/25 Redis