Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/450.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从外部调用Angularjs工厂函数_Javascript_Angularjs - Fatal编程技术网

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