我有错误(或可能错误的用法?)与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