亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

詳解angular2采用自定義指令(Directive)方式加載jquery插件

發布時間:2020-10-11 15:37:03 來源:腳本之家 閱讀:192 作者:Liuyt 欄目:web開發

由于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
     })]

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

玛多县| 开平市| 公安县| 和政县| 昆山市| 兴城市| 普兰县| 三原县| 平湖市| 治县。| 拉萨市| 勃利县| 安吉县| 喜德县| 延长县| 杭州市| 孙吴县| 靖安县| 樟树市| 自治县| 永登县| 六枝特区| 安国市| 金平| 临夏县| 宣恩县| 麻城市| 镇江市| 哈密市| 蓬溪县| 明光市| 湟中县| 盐源县| 大同市| 恩平市| 宁河县| 壤塘县| 惠安县| 中山市| 呈贡县| 乳源|