Javascript 对象未从离子服务正确返回
背景:我正在做一个关于纽约地铁的简单的爱奥尼亚项目。我使用的是爱奥尼亚的“标签”模板,我有一个标签,上面列出了所有的路线及其符号(1、2、3、a、C、E等),用户应该能够点击其中列出的任何路线,并进入详细信息页面(有点像启动新爱奥尼亚项目时在标签模板中设置“聊天/聊天详细信息”) 问题是我似乎无法获取Route Detail页面来加载有关所选路由的信息。像Javascript 对象未从离子服务正确返回,javascript,json,cordova,ionic-framework,Javascript,Json,Cordova,Ionic Framework,背景:我正在做一个关于纽约地铁的简单的爱奥尼亚项目。我使用的是爱奥尼亚的“标签”模板,我有一个标签,上面列出了所有的路线及其符号(1、2、3、a、C、E等),用户应该能够点击其中列出的任何路线,并进入详细信息页面(有点像启动新爱奥尼亚项目时在标签模板中设置“聊天/聊天详细信息”) 问题是我似乎无法获取Route Detail页面来加载有关所选路由的信息。像{{route.name}}和{{{route.desc}}这样的表达式都是空的 routes.json文件(示例,在www/js/route
{{route.name}}
和{{{route.desc}}
这样的表达式都是空的
routes.json文件(示例,在www/js/routes.json
下归档):
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;
})
}
}
})
问题不在于routes对象,因为相同的代码在
RoutesCtrl
中工作正常,而在于您在RouteDetailCtrl
中处理响应的方式。Route
服务返回的响应不是原始javascript值,而是承诺,您需要正确处理承诺才能得到响应:
.controller("RouteDetailCtrl", function($scope, $stateParams, Routes) {
Routes.getRoute($stateParams.id)
.then(function (response) {
$scope.route = response;
});
})
<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>
.controller("RouteDetailCtrl", function($scope, $stateParams, Routes) {
Routes.getRoute($stateParams.id)
.then(function (response) {
$scope.route = response;
});
})