2013-09-25 33 views
40

Aşağıdaki kod var:

app.factory('Position', ['$timeout', function() { 

    var position = { 
     latitude: 44, 
     longitude: 26 
    }; 

    console.log("Timeout started"); 

    $timeout(function() { 
     position.latitude += 15; 
     position.longitude += 15; 
    }, 2000); 

    return position; 
}]); 

Ve JavaScript konsolunda $timeout not defined olsun. Hizmetin bağımlılığını doğru olarak enjekte etmiyorum mu?

+0

Sadece yüzeysel bir biçimde bağlantılıdırlar ile gidebilirsiniz: Bir varsa özellikle Grunt kullanarak bir süreç inşa edin, 'ngmin' kontrol etmelisiniz. Enjektörlerinizin minimize edilmesini güvenli hale getirecek ve çift yazmanın yükünü kaldıracaktır. Sadece "function ($ timeout") işlevine ihtiyacınız olacak. – Benmj

cevap

81

Sen $timeout enjekte etmedi. Aşağıdaki gibi olmalıdır.

app.factory('Position', ['$timeout', function($timeout) { 
    ... 
}]); 

Bu şekilde bildirim, JavaScript kodunuz küçültüldüğünde hizmetlerin doğru bir şekilde tanımlanmasını sağlar. küçültülmesi (hızlı test için örneğin) planlarınız değilse bu minification nasıl yardımcı olduğuna ilişkin daha fazla bilgi için A Note on Minification ve Declaring AngularJS Modules For Minification

bkz, sadece

app.factory('Position', function($timeout) { 
    ... 
}); 
+3

İnşa edilen hizmetlere ($ ile herhangi bir şey) inandığınız, onları sadece fonksiyon sigalarına koyabiliyorsunuz, onları bağımlılıklarda beyan etmek zorunda değilsiniz. Eğer sadece $ hizmetleri kullanıyor iseniz. – jcollum

+2

Sanırım bu şekilde küçültme amacıyla yapılır http://docs.angularjs.org/tutorial/step_05 – kubuntu

+2

evet minification sözdizimi için bitti –