在 vanilla JavaScript 中动态加载 AngularJS 服务
你可以使用 AngularJS injector() 方法在 vanilla JavaScript 中加载 AngularJS 服务。检索到调用 angular.element() 的每个 jqLite 元素都有一个方法 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)的根的 jqLite 元素。为此,我们使用 angular.element() 方法,搜索包含 ng-app 或 data-ng-app 属性的 DOM 元素,如果不存在,我们将回退到 document 元素。我们使用 ngAppElement 来检索注入器实例(使用 ngAppElement.injector())。注入器实例用于检查要注入的服务是否存在(使用 injector.has()),然后在 service 变量中加载服务(使用 injector.get())。