Javascript 如何从外部调用Angularjs工厂函数
我有一个角度模块/工厂,如下所示:Javascript 如何从外部调用Angularjs工厂函数,javascript,angularjs,Javascript,Angularjs,我有一个角度模块/工厂,如下所示: var app = angular.module('webportal', ['vr.directives.slider', 'angular-flexslider', 'LocalStorageModule', 'multi-select']); app.factory('portal', ['uri', function (uri) { portal = {}; portal.getURLParameter = f
var app = angular.module('webportal', ['vr.directives.slider', 'angular-flexslider', 'LocalStorageModule', 'multi-select']);
app.factory('portal', ['uri', function (uri) {
portal = {};
portal.getURLParameter = function (name) {
var hash;
var vars = [];
var indexOfQuestion = window.location.href.indexOf('?');
if (indexOfQuestion != -1) {
var hashes = window.location.href.slice(indexOfQuestion + 1).split('&');
for (var i = 0; i < hashes.length; i++) {
if (typeof name == 'undefined')
vars.push(hashes[i]);
else {
hash = hashes[i].split('=');
if (hash[0] = name)
return hash[1];
}
}
}
};
return portal;
}]);
angular.injector(['webportal']).get('portal').getURLParameter('blah');
当然,这不起作用,并且在以下情况下失败:
错误:[$injector:modulerr]未能实例化模块webportal,原因是
收件人:[$injector:modulerr]未能实例化模块
vr.directions.slider由于:[$injector:modulerr]未能
实例化模块ngTouch,原因:[$injector:unpr]未知提供程序:
ngClickDirectiveProvider
$injector/unpr?p0=ngClickDirectiveProvider
矿工/
那么,有谁能告诉我什么是正确的称呼方式吗?在仔细研究后找到了答案:
angular.element(document.body).injector().get('portal').getURLParameter('blaha')
是的,它工作得很好。这只是我修剪并粘贴在这里的一个非常大的文件的一部分。或者执行
angular.injector(['ng','webportal'])。获取是的,这比使用document.body更让我喜欢。感谢您的原因是,您的一个模块具有dep on ng Touch,它实际上使用angular core的ngClickDirective提供程序。所以您也需要ng,但通常需要包括ng