UI-router、解析$http未按文档工作
ui-router, resolve, $http not working as documented
我在ui-router,resolve,factory和$http.get调用方面有错误(或者可能是错误的用法?(。
下面是配置部分中的代码片段:
$stateProvider
.state('index', {
url: '/',
views: {
'': {
templateUrl: './views/layout.html',
controller: 'MyAppCtrl'
},
'app-navbar@index': {
templateUrl: './views/app-navbar.html'
},
'app-accordion@index': {
templateUrl: './views/app-accordion.html',
controller: 'AppController',
resolve: {
appPromiseObj: function (AppFactory) {
return AppFactory.getApps();
}
}
},
...
并具有以下应用工厂
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;
});
但是当我运行应用程序时,"成功"回调中的控制台.log消息永远不会被执行。浏览器控制台日志显示 http 调用执行正常,代码为 200。我假设这意味着角度认为它失败了,还是我应该做其他事情?
我什至尝试返回 $q promise 对象(如其他有点相关的堆栈溢出线程中所建议的那样(,但没有成功。在工厂代码中,如果我使用测试数据(即没有 HTTP 调用(,即使我不返回 promise 对象,一切也正常。关于问题可能在哪里的任何指针?感谢任何帮助我调试的指针...
我在这里创建了工作 plunker。问题是AppFactory.getApps()
内部的承诺处理不正确。我们需要在开始时返回承诺,然后在成功时返回一些调整后的东西。现在它工作了...
这是我所做的主要更改:
// INSTEAD of this
// appFac.getApps1 = function () {
// promiseObj = $http.get('http://localhost:4567/applications')
// .success(function (data) {
// console.log("success calling http");
// angular.copy(data, appFac.apps);
// });
//
// return promiseObj;
// Let's use this
appFac.getApps = function () {
return $http
.get('http://localhost:4567/applications')
.success(function (data) {
console.log("success calling http");
angular.copy(data, appFac.apps);
return appFac.apps
});
// this is already returned above
//return promiseObj;
在此处检查其运行情况
扩展
基于您的扩展弹道机(仍然没有按预期完全工作(
-http://plnkr.co/edit/c89j3eFvYyguMt0QznAI?p=preview
我创建了附加和工作版本
- http://plnkr.co/edit/f2aucPcbtzqwIEogbjuJ?p=preview
唯一的更改是正确的命名(例如.app.js作为脚本而不是脚本加载.js...但最后,承诺现在已经解决了,这个 json:
[{"id":10566982,"networkID":34256899,"appID":56114114
,"name":"10566982name","description"
...
]
被加载并转换为手风琴:
- 56114114名称
- 58616695名称
最后在下面的评论中回答您的问题:
但是承诺Obj = $http(...(有什么区别... ;返回承诺 Obj 并返回$http (...(; ?
没有区别(除了我看到我的方法更清楚一点(。真正的区别是:
angular.copy(data, appFac.apps);
与
return appFac.apps
作为.success()
方法的最终陈述。它必须返回一些东西。塔的诀窍
- 无法获取文档.GetElementById工作正常
- 递增 PHP 变量在 JSCRIPT 文档工作方面
- 无论如何都要获取文档.在不删除整个页面的情况下写入即可工作
- 为什么返回文档.getElementsByClassName正在工作,而getElementbyId不在Watir中
- JQuery不是't在我的html文档中工作
- Angular和jQuery ng包含在文档中.准备不工作
- AngularJS文档准备就绪,无法正常工作
- 只有在文档内部的警报准备就绪后,触发器才能工作
- $().bind 在未准备好文档的情况下无法正常工作
- 函数在文档就绪时无法正常工作
- 使用 jsPDF 导出 Google 图表,在 Chrome 上工作,但在 Firefox 上不工作(文档中的空白图像)
- 不确定文档引用器是否正常工作
- jQuery的触发器方法在文档就绪上无法正常工作
- UI-router、解析$http未按文档工作
- jQuery 自定义插件无法按照文档的建议工作
- jquery文档悬停函数无法正常工作
- JavaScript文档.write不工作
- 确认不工作时替换上载的文档
- Sphinx和JavaScript文档工作流
- Chrome扩展API的警报有方法明确,是不按文档工作