2014-03-13 78 views
11

我在控制檯$q is not defined中收到此錯誤。當我做了一些研究,我發現像.q library has been deprecated一些東西從 http://www.breezejs.com/documentation/breeze-labs/breezeangularqjs

如果是這樣,那麼承諾的整個概念也已經過時,

+2

您是否已將$ q注入到您工作的範圍中? – Benmj

+0

請考慮更新我們的進度,並給我反饋的答案:) –

回答

25

承諾不會過時。事實上,他們最近獲得了相當大的動力,並被包含在下一個JavaScript版本中。

讓我們看看他們在說什麼:

這breeze.angular.q庫已被棄用。它被微風角度服務所取代,它更加乾淨地爲角度發展配置微風。

Breeze Angular Service告訴Breeze使用Angular的$q作爲承諾,並使用Angular的$http進行ajax調用。

他們說那是什麼微風使用角自己的承諾,對承諾,而不是自己的breeze.angular.q它採用Q承諾這是更能夠而且也比角用途$q承諾要重得多。這只是一個API更改。

內部角碼,你可以使用依賴注入獲得$q - 比如用簡單的語法:

myApp.controller("MyCtrl",function($q){ 
    //$q is available here 
}); 

另外,如果您想單獨使用它,你可以使用服務的位置,並直接從獲得$q注射器,但情況很少。 (如果你想要一個例子 - 讓我知道,我只是不包括代碼,通常表明不好的做法)。

+0

嘿,謝謝,起初我想同意我不那麼熟悉角度概念,所以當通過承諾文件搜索時,我發現http: //www.techjini.com/blog/javascript-promises/,這個文檔是否正確,如果不正確的話。非常感謝兄弟 –

+0

@RaviMone如果你在jsfiddle(http://jsfiddle.com)或其他類似的網站上創建一個簡短的例子,我可以看看並試着理解你做錯了什麼。 –

9
# in your console, try following code 
$injector = angular.injector(['ng']); 
q = $injector.get('$q'); 
deferred = q.defer(); 
# then do whatever you want