簡體   English   中英

將Angular工廠注入另一個工廠

[英]Injecting an Angular factory into another factory

讓一家工廠注入另一家工廠有點麻煩。

錯誤是:

  `ReferenceError: testDataService is not defined`

我認為這應該很容易解決,但這讓我頭疼。 我似乎對依賴項注入所涉及的各種語法有疑問。

在我的主要工廠中,我正在像這樣進行初始服務呼叫:

   this.treeGridOptions = gadgetInitService.initTreeGridTEST();

目前很好。

但是,在下面,它在initTreeGridTESTinitTreeGridTEST

這是我的testDataService工廠,它只返回一些硬編碼的選項:

 (function () {
'use strict';
angular.module('rage').factory('testDataService', [testData ]);

function testData() {
    var service = {
        treegridData: treegridData
    };
    return service;
}
function treegridData() {
    return {
        "altrows": true,
        "sortable": true,
        "columnsResize": true,
        "editable": true,
        "showToolbar": false,
        "width": "100%",
        "height": 400,
        "source": {}       
    };
}   
})();

並嘗試在此處注入“ testDataService”:

 (function () {
'use strict';

angular.module('rage').factory('gadgetInitService', ['testDataService', gridHierarchyService]);

function gridHierarchyService(testDataService) {
    var service = {
        initTreeGrid: initTreeGrid,
        initColumnChart: initColumnChart,
        initTreeGridTEST: initTreeGridTEST
    }
    return service;
}
function initTreeGridTEST() {
    var myData = testDataService.treegridData();
    return myData;
}
})();

感謝您的幫助,

短發

testDataService只是函數gridHierarchyService范圍內的一個變量,您正嘗試在定義該函數的函數外部訪問它。 只需將函數initTreeGridTEST移動到工廠構造函數中,就可以了。

 (function () {
'use strict';

    angular.module('rage').factory('gadgetInitService',gridHierarchyService);

    //Just used it instead of array notation, i prefer this since this is more readable
    gridHierarchyService.$inject = ['testDataService'];

    function gridHierarchyService(testDataService) {
    //yeah keep service it in a variable incase you need to use service object for referring public functions as is. I am just returning it.
     return { 
        initTreeGrid: _initTreeGrid,
        initColumnChart: _initColumnChart,
        initTreeGridTEST: _initTreeGridTEST
     }

     function _initTreeGridTEST() {
       var myData = testDataService.treegridData();
       return myData;
     }

   }

})();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM