角度js脚本中的多个IIFE并使用RequireJS进行注入

时间:2016-08-03 12:41:35

标签: javascript angularjs requirejs

我需要使用RequireJS注入我的angularJs脚本文件,它正常工作。但我不能在单个文件中写一个以上的人。在这种情况下,只有一个人会被执行。以下是我的代码。

var list = [
    {name: '4 Arn', isLetter: false},
    {name: 'Abax', isLetter: false},
    {name: 'Aramex', isLetter: false},
    {name: 'Booking', isLetter: false},
    {name: 'Dangerous', isLetter: false},
    {name: 'Manali', isLetter: false}
];

var newArr = list.reduce(function(collect, cur, index, originalArrray) {
    var currentChar = cur.name.toUpperCase().substr(0,1);
    if (currentChar < 'A') currentChar = '#';
    if (collect[1] != currentChar) {
        collect[0].push({isLetter: true, letter: currentChar});
        collect[1] = currentChar;
    }
    collect[0].push(cur);
    return collect;
}, [[], null])[0];

// output
console.log(newArr);

在上面的代码中,只执行了第一个生命。第二个生命没有得到任何突破点。如何在使用requireJS时解决此问题?如果我把两个人分别移到两个单独的文件中,那么它就可以了。但在所有情况下,我都不可能。请给我一个解决方案。

1 个答案:

答案 0 :(得分:1)

您在同一个文件中有多个匿名define个调用。这是RequireJS无法处理的。当RequireJS遇到匿名define时,它使用用于加载文件的模块名称作为要分配给匿名定义的模块的模块名称。这就是模块得名的方式。如果同一个文件中有多个匿名define,那么RequireJS应该做什么?两个模块不能具有相同的名称,也不会为您创建名称。当单个文件中存在一个模块时,您必须通过将名称作为第一个参数传递给define来明确命名它们。 (这是优化程序(r.js)为您所做的。)

(理论上除了:两个不同的RequireJS 上下文每个都有一个具有相同名称的模块,但这不是一个因素,因为从同一个文件加载的两个模块将在同一个上下文中。)

如果要保留匿名define电话,请将这两个模块保存在单独的文件中。如果您必须将模块放在一个文件中,请为模块命名。我会将它们分开进行开发,让捆绑器在生成用于部署的捆绑包时为它们命名。