在 vanilla JavaScript 中动态加载 AngularJS 服务

你可以使用 AngularJS injector() 方法在 vanilla JavaScript 中加载 AngularJS 服务。检索到调用 angular.element() 的每个 jqLit​​e 元素都有一个方法 injector(),可用于检索注入器。

var service;
var serviceName = 'myService';

var ngAppElement = angular.element(document.querySelector('[ng-app],[data-ng-app]') || document);
var injector = ngAppElement.injector();

if(injector && injector.has(serviceNameToInject)) {
    service = injector.get(serviceNameToInject);
}

在上面的例子中,我们尝试检索包含 AngularJS 应用程序(ngAppElement)的根的 jqLit​​e 元素。为此,我们使用 angular.element() 方法,搜索包含 ng-appdata-ng-app 属性的 DOM 元素,如果不存在,我们将回退到 document 元素。我们使用 ngAppElement 来检索注入器实例(使用 ngAppElement.injector())。注入器实例用于检查要注入的服务是否存在(使用 injector.has()),然后在 service 变量中加载服务(使用 injector.get())。