【问题标题】:Issue injecting Angular service into a factory将 Angular 服务注入工厂的问题
【发布时间】:2015-12-04 06:44:56
【问题描述】:

我有一个 AngularJS 工厂,我正在向其中注入服务。

我在 Chrome 中调试时可以看到服务被注入(在 return service; 行),但在我的一个函数中无法进一步访问它。

查看我尝试调用reportsContext.buildAggrFuncFromKriGrid的函数updateWidget

(function() {
    'use strict';
    angular.module('app').factory('widgetLinkingFactory', ['$q', 'reportsContext', linking]);

    function linking($q, reportsContext) {

        var service = {
            linkCharts: linkCharts
        };

        return service;

        function linkCharts(parId, widgets, parentWidgetData) {

            _.each(widgets, function(wid) {
                if (wid.dataModelOptions.linkedParentWidget) {
                    updateWidget(wid, parentWidgetData);
                }
            });
        }
    }

    function updateWidget(widget, parWidData) {

        // PULL RISK MEASURES ON CHILD WIDGET 
        var rm = widget.dataModelOptions.riskMeasures;

        // ******* WHY IS 'reportsContext' SERVICE IS UNDEFINED HERE ?????
        var aggrFuncArray = reportsContext.buildAggrFuncFromKriGrid(rm);

        var cubeVectors = aggrFuncArray[0];
        var aggrFunc = aggrFuncArray[1];

        return true;
    }
})();

【问题讨论】:

    标签: angularjs


    【解决方案1】:

    您需要将updateWidget 函数移动到linkCharts 以便reportsContext 在那里可用:

    (function() {
        'use strict';
        angular.module('app').factory('widgetLinkingFactory', ['$q', 'reportsContext', linking]);
    
        function linking($q, reportsContext) {
    
            var service = {
                linkCharts: linkCharts
            };
    
            return service;
    
            function linkCharts(parId, widgets, parentWidgetData) {
    
                _.each(widgets, function(wid) {
                    if (wid.dataModelOptions.linkedParentWidget) {
                        updateWidget(wid, parentWidgetData);
                    }
                });
            }
    
            function updateWidget(widget, parWidData) {
    
                // PULL RISK MEASURES ON CHILD WIDGET 
                var rm = widget.dataModelOptions.riskMeasures;
    
                var aggrFuncArray = reportsContext.buildAggrFuncFromKriGrid(rm);
    
                var cubeVectors = aggrFuncArray[0];
                var aggrFunc = aggrFuncArray[1];
    
                return true;
            }
        }
    
    })();
    

    【讨论】:

    • 是的,我又犯了一个愚蠢的错误。
    • 我现在可以看到我的reportsContext 服务完全可以访问;但是,我看不到$q。注入有什么问题吗?
    • 它应该可用,检查您的代码,可能是您设置的特定干扰。
    • 难以置信,没有。 $q 不可用。我也试过$http。依然没有。很奇怪。
    • 也许供应商根本不可用,根据这篇文章 - stackoverflow.com/questions/19719729/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多