javascript - 我应该如何使用 TypeScript 在 AMD 模式下调用 Spin.js?

标签 javascript spinner typescript

我必须使用 Spin.js 实现加载效果。下面是我的代码:

/// <amd-dependency path="spin" />
export class SpinnerUtil {
    private target: HTMLElement;
    private spinner: Spinner;

    public constructor(target: HTMLElement) {
        this.target = target;
    }

    public Spin() {
        var target = this.target;
        if (target.childElementCount == 0) {
            this.spinner = new Spinner().spin(target);
        }
    }

    public Stop() {
        this.spinner.stop();
        $(this.target).empty();
    }
}

我在另一个 TypeScript 文件中这样调用它:

初始化:

require.config({
baseUrl: 'javascripts',
paths: {
    'jquery': '../libraries/jquery/jquery-2.1.0',
    'spin': '../libraries/spin/spin-1.3.3'
},

调用:

import SP = require('utilities/Spin');

var spinnerId = 'spinnerView' + this.viewId;
this.$el.find('#spinnerView').attr('id', spinnerId);
var target: HTMLElement = document.getElementById(spinnerId);
this.spinner = new SP.SpinnerUtil(target);
this.spinner.Spin();

当我在浏览器中运行这个应用程序时,它抛出了如下错误:

Uncaught ReferenceError: Spinner is not defined.

enter image description here

enter image description here

enter image description here

(Spin.js已经在context中加载,但是Spinner实例还是无法初始化。)

我应该怎么做才能解决这个问题?


你好,这是我的简单测试代码:

/// <reference path="../typing/require.d.ts" />

require.config({
    baseUrl: '../',
    paths: {
        'jquery': '../libraries/jquery-2.1.0',
        'spin': '../libraries/spin-1.3.3'
    },
    shim: {
        jquery: {
            exports: '$'
        },
        spin: {
            exports: '$'
        }
    }
}); 

//require(['jquery','spin'], ($,Spinner) => {
    $(function () {
        new Spinner().spin($('#content')[0]);
    });
//});

效果很好,但是如果我删除这一行'require(['jquery','spin'], ($,Spinner) => {',它会抛出一个编译错误“找不到符号'Spinner' ",我怎么能在没有'require'语句的情况下使用 Spinner?我应该导入一些东西吗?

最佳答案

此处的问题出在您导入的 spin.js 库中。该库需要将 spin() 函数附加到 JQuery ($) - 以便函数 spin() 可用于任何 JQuery 对象。
你需要在你的 require.config 中添加一个 shim,如下所示:

require.config({
baseUrl: 'javascripts',
paths: {
    'jquery': '../libraries/jquery/jquery-2.1.0',
    'spin': '../libraries/spin/spin-1.3.3'
},
shim: {
spin: {
            exports: '$'
        }
}

这将扩展 JQuery 库函数以包含自旋库函数。
希望这会有所帮助。

关于javascript - 我应该如何使用 TypeScript 在 AMD 模式下调用 Spin.js?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22293500/

相关文章:

android - 单击微调菜单项不会显示微调列表

typescript - 如何在 vuex 存储 typescript 中动态设置对象的属性(同时保持类型安全)

javascript - 带有 HTML5 输出的小数点

javascript - 创建 DOM 元素的构造函数

java - 安卓- 9-patch

android - 填充微调器

typescript - 找不到名称 'describe'。您需要为测试运行器安装类型定义吗?

reactjs - react / typescript : extending a component with additional properties

javascript - 将 javascript 事件添加到自由思维导图中

javascript - 在 puppeteer 解决特定事件的 promise