详解angular2采用自定义指令(Directive)方式加载jquery插件


Posted in Javascript onFebruary 09, 2017

由于angular2兴起不久,相关插件还是很少,所以有时候不得不用一些jquery插件来完成项目,

那么如何把jquery插件放到angular2中呢?采用自定义指令!

在上下文之前要引入jquery,这点不再描述

首先创建一个指令,采用@input方式,来获取jquery插件所需要的参数。

在ngOnChanges时,也就是参数通过@input传入时,初始化jquery插件,

初始化jquery插件需要获取dom元素,所以我们引入ElementRef,用来获取dom元素

这里需要讲一下,jquery中回调函数,如果直接使用this,回调是无法获取angular的函数的

所以这里采用bind的形式,把this传递进去。这样在angular中的函数才会被正确调用。

以下为实现时间插件的代码:

import { Directive, Output, Input, ElementRef, EventEmitter } from '@angular/core';

// 引入jquery.daterangepicker插件相关JS和css,Css打包时需要打包成单个文件,或者直接在html单独引用
// 如何单独打包请看下节代码

require('../../../../assets/lib/bootstrap-daterangepicker-master/daterangepicker.js');
require('../../../../assets/lib/bootstrap-daterangepicker-master/daterangepicker.css');

// 自定义指令
@Directive({
 selector: '[dateRangePicker]',
})

export class DateRangePicker {

 /**
  * jquery.daterangepicker插件所需的参数
  * 参数:http://www.daterangepicker.com/#options
  */
 @Input() public dateRangePickerOptions: IJQueryDateRangePicker;

 // 选中事件
 @Output() selected: any = new EventEmitter();

 /**
  * 初始化
  * @param _elementRef
  */
 constructor(private _elementRef: ElementRef) {
 }

 /**
  * 属性发生更改时
  * @private
  */
 ngOnChanges() {
  $(this._elementRef.nativeElement).daterangepicker(this.dateRangePickerOptions, this.dateCallback.bind(this));
 }

 /**
  * 时间发生更改时使用emit传递事件
  * @private
  */
 dateCallback(start, end) {
  let format = "YYYY-MM-DD";
  if (this.dateRangePickerOptions.locale.format) {
   format = this.dateRangePickerOptions.locale.format;
  }
  let date = {
   startDate: start.format(format),
   endDate: end.format(format),
  }

  this.selected.emit(date);
 }

}
import { Component } from '@angular/core';
import { DateRangePicker } from '../../theme/directives';


@Component({
 selector: 'dashboard',
 template: `
   <div class="form-group">
        <label for="startDate">{date.startDate}</label>
        <input 
        dateRangePicker 
        [dateRangePickerOptions]="option"    
        (selected)="dateSelected($event)" 
        type="text" 
        class="form-control">
   </div>
 `,
 directives: [DateRangePicker]
})
export class Dashboard {

 /**
  * 当前选中的时间
  */
 public date: any

 /**
  * jquery时间插件参数
  */
 private option: Object = {
  locale: {
   format: "YYYY-MM-DD",
   separator: " 至 ",
   applyLabel: "确定",
   cancelLabel: '取消',
   fromLabel: '起始时间',
   toLabel: '结束时间',
   customRangeLabel: '自定义',
   daysOfWeek: ['日', '一', '二', '三', '四', '五', '六'],
   monthNames: ['一月', '二月', '三月', '四月', '五月', '六月',
    '七月', '八月', '九月', '十月', '十一月', '十二月'],
   firstDay: 1
  },
 };

 constructor() {
 }

 /**
  * emit回调事件,获取选中时间
  * @param date
  */
 dateSelected(date) {
  this.date = date;
 }
}

另外注意,css需要另外单独打包,或html单独引用,如何打包css,请看最后,我这里是用webpack打包的

// 采用ExtractTextPlugin单独对jquery插件进行css打包
loaders: [{
    test: /daterangepicker\.css$/,
    loader: ExtractTextPlugin.extract('style-loader', 'css-loader')
   }]

plugins: [
     new ExtractTextPlugin('[name].css', {
      allChunks: true
     })]

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

Javascript 相关文章推荐
JavaScript中的Document文档对象
Jan 16 Javascript
JavaScript的arguments对象应用示例
Sep 15 Javascript
Highcharts学习之坐标轴
Aug 02 Javascript
原生JS实现的放大镜效果实例代码
Oct 15 Javascript
JS实现页面跳转参数不丢失的方法
Nov 28 Javascript
微信小程序 require机制详解及实例代码
Dec 14 Javascript
详解Javascript百度地图接口开发文档中的类和方法
Feb 07 Javascript
基于JavaScript定位当前的地理位置
Apr 11 Javascript
this.$toast() 了解一下?
Apr 18 Javascript
Vue 动态添加路由及生成菜单的方法示例
Jun 20 Javascript
JS实现进度条动态加载特效
Mar 25 Javascript
Vue props中Object和Array设置默认值操作
Jul 30 Javascript
vue-router跳转页面的方法
Feb 09 #Javascript
基于JavaScript实现复选框的全选和取消全选
Feb 09 #Javascript
jquery.cookie.js的介绍与使用方法
Feb 09 #Javascript
js 数据存储和DOM编程
Feb 09 #Javascript
超全面的javascript中变量命名规则
Feb 09 #Javascript
简单的jQuery拖拽排序效果的实现(增强动态)
Feb 09 #Javascript
bootstrapValidator.min.js表单验证插件
Feb 09 #Javascript
You might like
解决GD中文乱码问题
2007/02/14 PHP
PHP 手机归属地查询 api
2010/02/08 PHP
php网站地图生成类示例
2014/01/13 PHP
PHP使用缓存即时输出内容(output buffering)的方法
2015/08/03 PHP
javascript+css 网页每次加载不同样式的实现方法
2009/12/27 Javascript
Jquery实现自定义tooltip示例代码
2014/02/12 Javascript
jquery实现拖拽调整Div大小
2015/01/30 Javascript
轻松实现js图片预览功能
2016/01/18 Javascript
JavaScript实现通过select标签跳转网页的方法
2016/09/29 Javascript
如何防止INPUT按回车自动提交表单FORM
2016/12/06 Javascript
canvas实现图片根据滑块放大缩小效果
2017/02/24 Javascript
JS+CSS实现网页加载中的动画效果
2017/10/27 Javascript
react实现antd线上主题动态切换功能
2019/08/12 Javascript
vue项目从node8.x升级到12.x后的问题解决
2019/10/25 Javascript
JavaScript中的函数申明、函数表达式、箭头函数
2019/12/06 Javascript
openLayer4实现动态改变标注图标
2020/08/17 Javascript
JS highcharts实现动态曲线代码示例
2020/10/16 Javascript
微信小程序对图片进行canvas压缩的方法示例详解
2020/11/12 Javascript
PHP 502bad gateway原因及解决方案
2020/11/13 Javascript
Python读取ini文件、操作mysql、发送邮件实例
2015/01/01 Python
Python3通过Luhn算法快速验证信用卡卡号的方法
2015/05/14 Python
Python实现针对json中某个关键字段进行排序操作示例
2018/12/25 Python
Python操作redis实例小结【String、Hash、List、Set等】
2019/05/16 Python
numpy.random模块用法总结
2019/05/27 Python
详解Python并发编程之创建多线程的几种方法
2019/08/23 Python
Python使用Pandas读写Excel实例解析
2019/11/19 Python
Pytorch 实现focal_loss 多类别和二分类示例
2020/01/14 Python
python绘图pyecharts+pandas的使用详解
2020/12/13 Python
phonegap常用事件总结(必看篇)
2017/03/31 HTML / CSS
中专毕业生的自我鉴定
2013/12/01 职场文书
接待员岗位责任制
2014/02/10 职场文书
2015年乡镇流动人口工作总结
2015/05/12 职场文书
2016年毕业实习心得体会范文
2015/10/09 职场文书
毕业生自荐求职信书写的技巧
2019/08/26 职场文书
python如何查找列表中元素的位置
2022/05/30 Python
vscode内网访问服务器的方法
2022/06/28 Servers