对象未从Ionic服务正确返回
Object not getting returned properly from Ionic service
背景:我正在做一个关于纽约地铁的简单Ionic项目。我使用的是Ionic"选项卡"模板,我有一个选项卡,列出了所有路线及其符号(1、2、3、a、C、E等),用户应该能够点击其中列出的任何路线,并进入详细信息页面(有点像启动新的Ionic项目时,选项卡模板中的"聊天/聊天详细信息"设置)。
问题是我似乎无法获得"路线详细信息"页面来加载有关所选路线的信息。像{{route.name}}
和{{route.desc}}
这样的表达式都是空白的。
routes.json文件(示例,在www/js/routes.json
下归档):
{
"routes": [{
"id": "1",
"name": "1",
"desc": "7 Avenue Local",
"className": "c123"
},
{
"id": "2",
"name": "2",
"desc": "7 Avenue Express",
"className": "c123"
},
{
"id": "3",
"name": "3",
"desc": "7 Avenue Express",
"className": "c123"
},
...
app.js:
angular.module('starter', ['ionic', 'starter.controllers', 'starter.services'])
// ...
.state("tab.routes", {
url: "/routes",
views: {
"tab-routes": {
templateUrl: "templates/tab-routes.html",
controller: "RoutesCtrl"
}
}
})
.state("tab.route-detail", {
url: "/routes/:id",
views: {
"tab-routes": {
templateUrl: "templates/route-detail.html",
controller: "RouteDetailCtrl"
}
}
});
controllers.js:
angular.module('starter.controllers', [])
// ...
/* This one works perfectly */
.controller('RoutesCtrl', function($scope, $http) {
$http.get("js/routes.json").then(function(response) {
$scope.routes = response.data.routes;
console.log($scope.routes);
});
})
/* This one does NOT work */
/* $stateParams.id returns the correct value, but $scope.route
does not store the Route returned from the service (null) */
.controller("RouteDetailCtrl", function($scope, $stateParams, Routes) {
$scope.route = Routes.getRoute($stateParams.id);
})
services.js:
angular.module('starter.services', [])
/* This is the problem */
.factory("Routes", function($http) {
return {
getRoute: function(id) {
return $http.get("js/routes.json").then(function(response) {
var routes = response.data.routes;
for(var i = 0; i < routes.length; i++) {
if(parseInt(id) === parseInt(routes[i].id)) {
return routes[i];
}
}
return null;
})
}
}
})
我认为这个问题与JSON在services.js
中返回的方式有关——是我的JSON存储方式,还是我在接收端"解析"它的方式?"RoutesCtrl"工作得很好,但无论我在services.js
中使用response
的什么变体,我似乎都无法获得路线细节——我尝试过response
、response.data
、response.data.routes
,但都不起作用。
route-detail.html:(如您所见,{{route.whatst}}引用了controllers.js
中的$scope.route,但它没有被存储)。
<ion-view view-title="{{route.name}}">
<ion-content class="padding">
<h2>{{route.name}}</h2>
<h2>{{route.desc}}</h2>
<p>This is the detail page.</p>
</ion-content>
</ion-view>
问题不在于routes对象,因为相同的代码在RoutesCtrl
中运行良好,而在于您在RouteDetailCtrl
中处理响应的方式。Route
服务返回的响应不是原始javascript值,而是promise,您需要正确处理promise才能得到响应:
.controller("RouteDetailCtrl", function($scope, $stateParams, Routes) {
Routes.getRoute($stateParams.id)
.then(function (response) {
$scope.route = response;
});
})
- 监视函数从服务返回不起作用,但作用域函数起作用
- 角度服务未返回数据
- chrome.storage.sync.get未返回值-Angular服务
- 对象未从Ionic服务正确返回
- 为什么Angularjs服务返回的是字符数组而不是对象数组
- SailsJS:如何从服务返回值
- 我怎么能在Angular JS中等待,直到我的web服务返回
- 如何在公共js模块中从web服务返回数据
- 当视图在AngularJS中返回时,我如何获得异步服务调用来更新视图
- 承诺返回未定义的服务
- 从服务返回值时$scope控制器的变量是未定义的
- 从 Angular 模态服务中的模态主体模板返回数据
- 从角度服务返回空值的变量
- KendoDatePicker 无法识别从 Web 服务以 JSON 格式返回的日期
- 谷歌方向服务w/Waypoints返回ZERO_RESULTS
- 在Angular服务中使用$http时,为什么要返回promise和数据
- 返回JSONP的服务
- ajax调用wcf服务返回错误
- 从反复调用的承诺返回服务中获取最新数据
- 在AngularJs中返回服务的最好方式是什么?及其原因