2015-11-09 182 views
0

我正在查看HotTowel-Angular的代碼,我試圖做一個小例子使用它,但我無法讓它工作。通過模塊傳遞角度服務

這是我的代碼:

var app = angular.module('myApp', ['common']); 

var common = angular.module('common', []); 

common.factory('commonf', ['$rootScope', '$timeout', commonFactory]); 



function commonFactory($rootScope, $timeout){ 

    var service = { 
    $rootScope: $rootScope, 
    $timeout: $timeout 
    } 

    return service; 

} 

app.controller('TestCtrl', ['commonf', testctrl]); 

function testctrl(commonf) { 

    activate(); 

    var $timeout = commonf.$timeout; 

    function activate() { 

    $timeout(function() { 
    alert("test"); 
    }, 5); 

    } 

} 

的想法是保留用於整個應用程序,它被注入到所有服務/控制器服務中的所有相同的角度服務。

當我試圖做到這一點上面,我得到以下錯誤:

"$timeout is not a function";

編輯:Plunker

+0

您將服務注入爲'commonf',但您分配了'common。$ timeout'。在你的問題中是否有這些拼寫錯誤,或者這是否在你的代碼中?請修復縮進,你的代碼是可怕的閱讀。 – muenchdo

+0

這是一個錯字抱歉,修正了 –

回答

1

要調用激活()你從commonf拉依賴之前。更改爲:

function testctrl(commonf) { 
    // define this first so that $timeout is defined when activate is executed 
    var $timeout = commonf.$timeout; 

    activate(); 

    function activate() { 
    $timeout(function() { 
     alert("test"); 
    }, 5); 
} 

在JavaScript中,將變量聲明作爲函數中的第一條語句是一種很好的做法。

+0

Doh!沒有看到。謝謝 :) –