创建angularjs模块

时间:2016-01-24 15:53:19

标签: javascript angularjs

我只是查看angular-flash的源代码,如下所示: https://github.com/gtramontina/angular-flash/blob/master/angular-flash.js

任何人都可以向我解释他是如何创建flash模块

(function (root, factory) {
    if (typeof module !== 'undefined' && module.exports) {
        // CommonJS
        module.exports = factory(root, require('angular'));
    } else if (typeof define === 'function' && define.amd) {
        // AMD
        define(['angular'], function (react, angular) {
            return (root.angularFlash = factory(root, angular));
        });
    } else {
        // Global Variables
        root.angularFlash = factory(root, root.angular);
    }
}(this, function (window, angular) {
    return angular.module('flash', []);
}));

我不理解的是正在接收的参数factoryroot.angularFlash变量?这如何创建angular module flash

我没有看到angularFlash变量过于使用的任何地方?

2 个答案:

答案 0 :(得分:0)

(function (root, factory) {
    if (typeof module !== 'undefined' && module.exports) {
        // CommonJS
        module.exports = factory(root, require('angular'));
    } else if (typeof define === 'function' && define.amd) {
        // AMD
        define(['angular'], function (react, angular) {
            return (root.angularFlash = factory(root, angular));
        });
    } else {
        // Global Variables
        root.angularFlash = factory(root, root.angular);
    }
}(this, function (window, angular) {
    return angular.module('flash', []);
}));

如果你看一下底部的IIFE,它会调用一个匿名函数作为第二个参数,它被命名为factory,定义了角度模块flash:

factory = function (window, angular) {
    return angular.module('flash', []);
}

因此,当调用工厂时,它基本上定义了一个名为flash的模块。

答案 1 :(得分:0)

假设此脚本在浏览器上下文中运行(与CommonJS或AMD相反)。

function (root, factory) ...开始的外部函数是立即调用的函数表达式或IIFE的示例。使用参数this和函数(绑定到factory参数)调用此外部函数。在这种情况下,关键字this引用全局window对象。

因此,此功能的效果基本上与:

相同
window.angularFlash = window.angular.module('flash', [])

这将创建名为flash的模块,并将全局变量angularFlash绑定到该模块,该变量可用于引用代码中其他位置的模块。