【问题标题】:How to call an Angularjs factory function from outside如何从外部调用 Angularjs 工厂函数
【发布时间】:2014-11-27 11:46:02
【问题描述】:

我有一个像这样的角度模块/工厂:

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;
    }]);

现在我正在尝试从外部角度调用getURLParameter,如下所示:

angular.injector(['webportal']).get('portal').getURLParameter('blah');

当然这不起作用并且失败:

错误:[$injector:modulerr] 由于无法实例化模块 webportal to: [$injector:modulerr] 无法实例化模块 vr.directives.slider 由于:[$injector:modulerr] 失败 实例化模块 ngTouch 由于:[$injector:unpr] 未知提供者: ngClickDirectiveProvider http://errors.angularjs.org/1.2.25/$injector/unpr?p0=ngClickDirectiveProvider minErr/......

那么谁能告诉我正确的称呼方式是什么?

【问题讨论】:

  • 是的,它工作正常。这只是我修剪并粘贴在这里的一个非常大的文件的一部分。
  • 或者angular.injector(['ng','webportal']).get
  • 是的,我比使用 document.body 更喜欢这个。谢谢你
  • 原因是因为您的模块之一依赖于 ng-Touch,它实际上使用了 Angular 核心的 ngClickDirective 提供程序。所以你也需要 ng,但你通常需要包含 ng

标签: javascript angularjs


【解决方案1】:

多打听后找到答案:

angular.element(document.body).injector().get('portal').getURLParameter('blaha')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-26
    • 2015-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多