我有錯誤(或可能錯誤的用法?)與UI路由器,解決,工廠和$ http.get調用。
下面的代碼中配置部分片段:
$stateProvider
.state('index', {
url: '/',
views: {
'': {
templateUrl: './views/layout.html',
controller: 'MyAppCtrl'
},
'[email protected]': {
templateUrl: './views/app-navbar.html'
},
'[email protected]': {
templateUrl: './views/app-accordion.html',
controller: 'AppController',
resolve: {
appPromiseObj: function (AppFactory) {
return AppFactory.getApps();
}
}
},
...
,並具有以下AppFactory
myApp.factory('AppFactory', function ($http) {
var appFac = {
apps: []
};
appFac.getApps = function() {
promiseObj = $http
.get('http://localhost:4567/applications')
.success(function (data) {
console.log("success calling http");
angular.copy(data, appFac.apps);
});
return promiseObj;
};
return appFac;
});
但是當我運行應用程序,在「成功的console.log消息'回調永遠不會被執行。瀏覽器控制檯日誌顯示http調用在代碼200下執行OK。我假設這意味着角度認爲它失敗了,或者我應該做其他事情嗎?
我甚至嘗試返回$ q承諾對象(如其他有些相關的堆棧溢出線程所示),但沒有成功。在工廠代碼中,如果我使用測試數據(即沒有HTTP調用),即使我不返回承諾對象,一切正常。關於問題出在哪裏的任何指針?欣賞任何指點來幫助我調試...
Radim - 首先謝謝你。我想我已經習慣了JS(作爲Java程序員和所有這些),但promiseObj = $ http(...)...之間的區別是什麼?返回promiseObj並返回$ http(...);也就是說,我看到的巨大差異是你正在返回appFac.apps。當我在本地嘗試它時,它似乎仍然不起作用。我現在看到這個調用成功了,但是控制檯消息仍然沒有顯示(也沒有GUI的其餘部分:()。我創建了一個plunker:http://plnkr.co/edit/c89j3eFvYyguMt0QznAI?p=preview Any想法? – user3379755 2014-12-04 18:20:18
先生,我解決了你的問題,並用更多的答案更新了答案。希望這會有所幫助;) – 2014-12-05 06:44:32
Radim - 感謝更多的見解,真的有所幫助。這是我第一次端到端的Angular PoC,所以很多問題/爲我學習! – user3379755 2014-12-05 18:23:00