检查角度是否已加载并使用最新版本覆盖它

时间:2015-02-16 11:19:55

标签: javascript angularjs sharepoint

我正在研究SharePoint 2013中一个非常复杂的功能,我需要将角度代码作为webpart包含在页面中。

有几种情况,例如

  1. 母版页(页眉和页脚的共享布局以及其他内容)可能已经包含angularJS文件(也可以是旧版本)。

  2. 当我们在其中添加带有角度代码的Web部件时,我还在其中包含角度脚本引用,因为我们永远不知道母版页/共享布局是否具有角度引用。

  3. 我试图重现类似情况 -

    - 包括Angular脚本两次..第一个是较旧的Angular,第二个是最新的。代码无法使用以下错误 -

    WARNING: Tried to load angular more than once.
    Uncaught TypeError: undefined is not a functionangular.js:26130 (anonymous function)
    

    我想要实现的目标 -

    我想检查主页是否已经引用了Angular,即使它已经有了,忽略它并且更喜欢我给出的引用,因为我的代码将是模块化的并且依赖于我想要包含的脚本(最新的,大多数可能)

    我知道这听起来很愚蠢,但这就是它与SharePoint Web部件一起工作的方式..我相信在Angular中会有类似noConflict的方式。

1 个答案:

答案 0 :(得分:1)

要知道页面上是否已加载angularjs,请在任何标记上查找 ng-app 属性。

您可以使用此功能:

function getAllElementsWithAttribute(attribute)
{
  var matchingElements = [];
  var allElements = document.getElementsByTagName('*');
  for (var i = 0, n = allElements.length; i < n; i++)
  {
    if (allElements[i].getAttribute(attribute) !== null)
    {
      // Element exists with attribute. Add to array.
      matchingElements.push(allElements[i]);
    }
  }
  return matchingElements;
}

然后,

getAllElementsWithAttribute('ng-app');

参考这个问题

Can I get elements by attribute selector when querySelectorAll is not available without using libraries?

它可以帮助您检测角度的存在。 即使我有类似的情况,想知道如何找到角度版本并加载最近的版本。