AngularJS(Ionic Framework) - 在控制器中改变状态似乎不起作用

时间:2015-08-11 04:26:15

标签: javascript angularjs ionic-framework ionic

我尝试做的是在搜索控制器内,一旦我将搜索结果从服务器($ 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 - 或者更确切地说,在搜索结果页面上以一种或另一种形式访问它。

非常感谢。

3 个答案:

答案 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;)它有效。这看起来是对的吗?