在 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()
)。