【发布时间】:2017-12-30 04:08:12
【问题描述】:
我有一个使用 UI Route 进行视图路由的应用。
在/berlinerliste/ 上,它触发一个函数并显示一个对象数组。
点击这些对象之一时,视图将变为/berlinerliste/{id}/,并显示特定对象的详细信息。
问题是在这些带有/berlinerliste/{id}/ URL 的单个对象之一上重新加载页面时,这会导致页面没有数据。
我的服务如下所示:
.factory('SearchService', ['$http', function($http) {
var service = {
flatexhibitors : [],
datafairs : [],
flatexhibitorsuni : [],
datafairsuni : [],
getAllExhibitors : function () { //first call to get all items on page load
var searchindex = 'XX';
var url = '../getexhibitors.php';
var config = {
params: {
search: searchindex
},
cache:true
};
$http.get(url, config).then(function (data) {
service.datafairs = data.data.rows;
for (var i in service.datafairs) {
service.flatexhibitors.push(service.datafairs[i].doc);
};
return service.flatexhibitors;
});
},
getAllPeople: function() { // call to reload data and the filter it
var searchindex = 'XX';
var url = '../getexhibitors.php';
var config = {
params: {
search: searchindex
},
cache:true
};
return $http.get(url, config).then(function (resp) {
service.datafairsuni = resp.data.rows;
for (var i in service.datafairs) {
service.flatexhibitorsuni.push(service.datafairs[i].doc);
};
return service.flatexhibitorsuni;
console.log(service.flatexhibitorsuni);
});
},
findExh : function(id){
function personMatchesParam(exhibitor) {
return exhibitor.slug === id;
console.log(exhibitor.slug);
}
return service.getAllPeople().then(function (data) {
return data.find(personMatchesParam)
});
}
}
service.getAllExhibitors();
return service;
}])
这是我的视图配置的样子:
.config(function($stateProvider) {
var berlinerState = {
name: 'berliner',
url: '/berlinerliste/',
views: {
'header': {
templateUrl: 'header.htm'
},
'main':{
templateUrl: 'bl2017.htm'
}
}
}
var exhibitorState = {
name: 'exhibitor',
url: '/berlinerliste/{id}',
views: {
'header': {
templateUrl: 'header.htm'
},
'main':{
templateUrl: 'exhibitor.htm'
}
},
resolve: {
exhibitor: function(SearchService, $stateParams) {
return SearchService.findExh($stateParams.id);
}
}
}
$stateProvider.state(berlinerState);
$stateProvider.state(exhibitorState);
})
除了 /berlinerliste/{id}/ 重新加载不起作用这一事实之外,它还会减慢速度,因为每次点击对象时,我都会:
- 进行 http 调用(如果不是页面重新加载,则冗余,就像我之前在页面加载时所做的那样)
- 按 id 过滤项目
- 如果结果来自
/berlinerliste/,则正确显示结果,在页面重新加载时不显示任何内容。
关于如何解决此问题的任何提示?
我认为理想情况下,冗余的 http 调用(以及整个解析)应该只在页面重新加载时进行,而不是在来自父 URL 时进行。
我错过了什么?
你可以看直播here
更新
请参阅 UI Router 人员的 Plunkr 示例,他们完全按照我的要求进行操作。对他们有效,对我无效。
【问题讨论】:
-
你为什么不使用 $stateParams github.com/angular-ui/ui-router/wiki/url-routing ?
-
@Vivz 我用 $stateParams 在代码中编辑了它,同样的问题。
标签: javascript angularjs angular-ui-router resolve