我尝试做的是在搜索控制器内,一旦我将搜索结果从服务器($ http)更改回到另一个视图 - 搜索结果视图。我不确定我所采用的方法是否正确,但无论哪种方式似乎都没有效果。我还需要传递响应,因此新视图可以显示结果/响应。
我的app.js:
.controller('SearchCtrl', function($scope, $state, $location, $ionicPopup, service) {
....
$scope.doSearch = function(state) {
.....
var result = service.doSearch(dataObj);
result.then(function(response) {
console.log("I'm here");
$state.go('tab.search-results');
......
然后我的搜索控制器有:
<ion-view view-title="Search Results">
<ion-content padding="true">
hello world
</ion-content>
</ion-view>
我的搜索结果视图(tab-search-results.html)目前有以下基本代码:
{{1}}
这个基本结构也是我所有其他页面/视图的设置方式。
执行搜索时会发生的情况是输出控制台消息,然后根据 tab.search-results 状态将URL更改为/ results,但模板/视图不会改变/显示。
有趣的是,如果我更改$ state.go('tab.search-results');指向我知道的另一个app状态/视图,它工作正常 - 但无论出于何种原因,这个状态/视图都不起作用。
另外,如果有更好的方法来实现同样的目的,请告诉我。我将需要最终将“响应”从SearchCtrl传递到SearchResultsCtrl - 或者更确切地说,在搜索结果页面上以一种或另一种形式访问它。
非常感谢。
答案 0 :(得分:2)
我认为您正在寻找$stateParams
。
var result = service.doSearch(dataObj);
result.then(function(response) {
$state.go('tab.search-results', {'searchData':response});
}
在routes
文件中:
.state('tab.search-results', {
url: '/results/:searchData',
views: {
'tab-search-results': {
templateUrl: 'templates/tab-search-results.html',
controller: 'SearchResultsCtrl as searchResults'
}
}
})
在您的SearchResultsCtrl
:
.controller($stateParams) {
console.log($stateParams.searchData) // will give you search results
}
注意:如果您不想通过网址传递数据,可以使用params
方法中的.state()
密钥。
.state('tab.search-results', {
url: '/results',
params: {
'searchData':null
},
views: {
'tab-search-results': {
templateUrl: 'templates/tab-search-results.html',
controller: 'SearchResultsCtrl as searchResults'
}
}
})
答案 1 :(得分:1)
我意识到为什么我的观点没有正确改变。该修复程序正在更改子视图中的视图以引用父视图。
失败(子视图具有来自父级的唯一名称):
.....state('tab.search', {
url: '/search',
views: {
'tab-search': {
templateUrl: 'templates/tab-search.html',
controller: 'SearchCtrl as search'
}
}
})
.state('tab.search-results', {
url: '/results',
views: {
'tab-search-results': {
templateUrl: 'templates/tab-search-results.html',
controller: 'SearchResultsCtrl as searchResults'
}
}
})
成功(子视图引用父级,&#39; tab-search&#39;):
.....state('tab.search', {
url: '/search',
views: {
'tab-search': {
templateUrl: 'templates/tab-search.html',
controller: 'SearchCtrl as search'
}
}
})
.state('tab.search-results', {
url: '/results',
views: {
'tab-search': {
templateUrl: 'templates/tab-search-results.html',
controller: 'SearchResultsCtrl as searchResults'
}
}
})
答案 2 :(得分:0)
谢谢大家,我想我解决了这个问题。它将搜索结果页面置于选项卡抽象状态下。例如:tab.search-results而不是搜索结果 - 我猜这是问题所在,因为没有搜索结果标签。当我将状态重新命名为搜索结果时(并修改了$ state.go以使用&#39;搜索结果&#39;而不是&#39; tab.search-results&#39;)它有效。这看起来是对的吗?