zoukankan      html  css  js  c++  java
  • SharePoint Formwork 学习笔记——使用第三方插件

    1. 创建spfx项目

    2. 引入需要第三方插件(有两种方式)

      2.1 方法一:在config.json的externals中引入需要的js

    {
      "$schema": "https://developer.microsoft.com/json-schemas/spfx-build/config.2.0.schema.json",
      "version": "2.0",
      "bundles": {
        "hello-world-web-part": {
          "components": [
            {
              "entrypoint": "./lib/webparts/helloWorld/HelloWorldWebPart.js",
              "manifest": "./src/webparts/helloWorld/HelloWorldWebPart.manifest.json"
            }
          ]
        }
      },
      "externals": {
        "jquery": "https://code.jquery.com/jquery-1.12.4.min.js",
        "datatables.net": "https://cdn.datatables.net/1.10.15/js/jquery.dataTables.min.js",
        "moment": "https://momentjs.com/downloads/moment.min.js"
      },
      "localizedResources": {
        "HelloWorldWebPartStrings": "lib/webparts/helloWorld/loc/{locale}.js"
      }
    }

      externals中,“jquery”类似名字,"https://code.jquery.com/jquery-1.12.4.min.js"是js的URL地址。

      2.1 方法二:直接将js文件放入项目中的 “src/webparts/项目名”

             

    3. 使用引入的js(两种方式)

       3.1. 方法一:通过import引入

      使用2.1中的方法引入:import 'jquery';

      使用2.2中的方法引入:import './moment-plugin'

      3.2. 方法二:通过require引入

      使用2.1中的方法引入:require('jquery');

      使用2.2中的方法引入:require('./script');

    4. 引入样式文件 

      可在render方法中直接类似HTML的方式引入,如:

      public render(): void {
        this.domElement.innerHTML = `
        <link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.15/css/jquery.dataTables.min.css" />
        <table id="requests" class="display ${styles.helloWorld}" cellspacing="0" width="100%">
            <thead>
                <tr>
                    <th>ID</th>
                    <th>Business unit</th>
                    <th>Category</th>
                    <th>Status</th>
                    <th>Due date</th>
                </tr>
            </thead>
        </table>`;
        require('jquery');
        require('./script');
      }

       通过该方式可以使用类似JavaScript的方式做项目。

    5.完整代码

    HelloWorldWebParts.ts:

    import { Version } from '@microsoft/sp-core-library';
    import {
      BaseClientSideWebPart,
      IPropertyPaneConfiguration,
      PropertyPaneTextField
    } from '@microsoft/sp-webpart-base';
    import { escape } from '@microsoft/sp-lodash-subset';
    import './moment-plugin';
    import 'datatables.net';
    import 'moment';
    import styles from './HelloWorldWebPart.module.scss';
    import * as strings from 'HelloWorldWebPartStrings';
    
    export interface IHelloWorldWebPartProps {
      description: string;
    }
    
    export default class HelloWorldWebPart extends BaseClientSideWebPart<IHelloWorldWebPartProps> {
    
      public render(): void {
        this.domElement.innerHTML = `
        <link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.15/css/jquery.dataTables.min.css" />
        <table id="requests" class="display ${styles.helloWorld}" cellspacing="0" width="100%">
            <thead>
                <tr>
                    <th>ID</th>
                    <th>Business unit</th>
                    <th>Category</th>
                    <th>Status</th>
                    <th>Due date</th>
                </tr>
            </thead>
        </table>`;
        require('jquery');
        require('./script');
      }
    
      protected get dataVersion(): Version {
        return Version.parse('1.0');
      }
    
      protected getPropertyPaneConfiguration(): IPropertyPaneConfiguration {
        return {
          pages: [
            {
              header: {
                description: strings.PropertyPaneDescription
              },
              groups: [
                {
                  groupName: strings.BasicGroupName,
                  groupFields: [
                    PropertyPaneTextField('description', {
                      label: strings.DescriptionFieldLabel
                    })
                  ]
                }
              ]
            }
          ]
        };
      }
    }

    config.json:

    {
      "$schema": "https://developer.microsoft.com/json-schemas/spfx-build/config.2.0.schema.json",
      "version": "2.0",
      "bundles": {
        "hello-world-web-part": {
          "components": [
            {
              "entrypoint": "./lib/webparts/helloWorld/HelloWorldWebPart.js",
              "manifest": "./src/webparts/helloWorld/HelloWorldWebPart.manifest.json"
            }
          ]
        }
      },
      "externals": {
        "jquery": "https://code.jquery.com/jquery-1.12.4.min.js",
        "datatables.net": "https://cdn.datatables.net/1.10.15/js/jquery.dataTables.min.js",
        "moment": "https://momentjs.com/downloads/moment.min.js"
      },
      "localizedResources": {
        "HelloWorldWebPartStrings": "lib/webparts/helloWorld/loc/{locale}.js"
      }
    }

    script.js

    $(document).ready(function () {
        $('#requests').DataTable({
            'ajax': {
                'url': "https://xxxxxxx.sharepoint.com/_api/web/lists/getbytitle('IT Requests')/items?$select=ID,BusinessUnit,Category,Status,DueDate",
                'headers': { 'Accept': 'application/json;odata=nometadata' },
                'dataSrc': function (data) {
                    return data.value.map(function (item) {
                        return [
                            item.ID,
                            item.BusinessUnit,
                            item.Category,
                            item.Status,
                            new Date(item.DueDate),
                        ];
                    });
                }
            },
            columnDefs: [{
                targets: 4,
                render: $.fn.dataTable.render.moment('YYYY/MM/DD')
            }]
        });
    });

     moment-plugin.js

    // UMD
    (function (factory) {
        "use strict";
    
        if (typeof define === 'function' && define.amd) {
            // AMD
            define(['jquery'], function ($) {
                return factory($, window, document);
            });
        }
        else if (typeof exports === 'object') {
            // CommonJS
            module.exports = function (root, $) {
                if (!root) {
                    root = window;
                }
    
                if (!$) {
                    $ = typeof window !== 'undefined' ?
                        require('jquery') :
                        require('jquery')(root);
                }
    
                return factory($, root, root.document);
            };
        }
        else {
            // Browser
            factory(jQuery, window, document);
        }
    }
    
    (function ($, window, document) {
        $.fn.dataTable.render.moment = function (from, to, locale) {
            // Argument shifting
            if (arguments.length === 1) {
                locale = 'en';
                to = from;
                from = 'YYYY-MM-DD';
            }
            else if (arguments.length === 2) {
                locale = 'en';
            }
    
            return function (d, type, row) {
                var moment = require('moment');
                var m = moment(d, from, locale, true);
    
                // Order and type get a number value from Moment, everything else
                // sees the rendered value
                return m.format(type === 'sort' || type === 'type' ? 'x' : to);
            };
        };
    }));

    效果:

  • 相关阅读:
    c++内存管理5-虚拟内存4区结构图
    C++内存管理5-处理new分配内存失败情况(转)
    C++内存管理4-Windows编程中的堆管理(转)
    C++内存管理3-探讨C++内存和回收
    C++内存管理2-内存泄漏
    VS2015远程调试
    C++内存管理1-64位系统运行32位软件会占用更多的内存吗?
    ffmpeg安装步骤
    golang字符串拼接
    如何严格设置php中session过期时间
  • 原文地址:https://www.cnblogs.com/huasonglin/p/9364592.html
Copyright © 2011-2022 走看看