javascript - AngularJS( ionic 框架)-更改 Controller 内的状态似乎不起作用

标签 javascript angularjs ionic-framework

我想要做的是在搜索 Controller 中,一旦我从服务器($http)返回搜索结果,请将 View 更改为不同的 View - 搜索结果 View 。我不确定我正在采用的方法是否正确,但无论如何它似乎都不起作用。我还需要传递响应,以便新 View 可以显示结果/响应。

我的app.js:

.....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'
      }
  }
})

然后我的搜索 Controller 有:

.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');
        ......

我的搜索结果 View (tab-search-results.html)目前具有以下基本代码:

<ion-view view-title="Search Results">
    <ion-content padding="true">
        hello world
     </ion-content>
</ion-view>

这个基本结构也是我所有其他页面/ View 的设置方式。

当我执行搜索时,会输出控制台消息,然后 URL 根据 tab.search-results 状态更改为/results,但模板/ View 不会t 更改/显示。

有趣的是,如果我更改 $state.go('tab.search-results');指向我知道有效的另一个应用程序状态/ View ,它工作得很好 - 但无论出于何种原因,这个状态/ View 都不起作用。

此外,如果有更好的方法来实现同样的目标,请告诉我。我最终需要将“响应”从 SearchCtrl 传递到 SearchResultsCtrl - 或者以一种或另一种形式在搜索结果页面上访问它。

非常感谢。

最佳答案

我认为您正在寻找$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
}

注意:如果您不想通过 URL 传递数据,可以在 .state() 方法中使用 params 键.

.state('tab.search-results', {
  url: '/results',
  params: {
    'searchData':null
  },
  views: {
      'tab-search-results': {
          templateUrl: 'templates/tab-search-results.html',
          controller: 'SearchResultsCtrl as searchResults'
      }
  }
})

关于javascript - AngularJS( ionic 框架)-更改 Controller 内的状态似乎不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31933212/

相关文章:

javascript - 删除或重复非单词字符,例如 HTML 文本区域中的换行符,这些字符会导致 modsecurity 出现错误

javascript - h1 标签在 javascript 中无法正常工作

angularjs - Angular JS UI-Grid 删除行

angularjs - 带有 ui-router 的 AngularJS 上类似 Accordion 的状态

angularjs - 使用 Charts.js 的 Angular 图表中未显示系列详细信息

javascript - HTML 和 AngularJS 中的切换按钮

javascript - 在 Javascript 中获取两个字符串之间的字符串的正则表达式

angularjs - Angular RouteProvider Resolve 未调用

angular - 固定 ionic 3 : property 'questions' does not exist on type 'Object'

javascript - ionic3 - 错误错误 : Uncaught (in promise): Error: InvalidPipeArgument: '[object Object]' for pipe 'AsyncPipe'