angularjs - UI 路由器和查询参数

标签 angularjs angular-ui-router query-parameters

我使用 Angular、UI Router 和 Elasticsearch 构建了一个小型搜索应用程序,我试图在结果页面的 url 中获取 UI Router 查询参数。

我正在努力实现这一目标

domain.com/search?user_search_terms

有了这个
.state('search', {
        url: '/search?q',

我在 Controller 中像这样初始化 searchTerms 和 $stateParams
vm.searchTerms = $stateParams.q || '';

然后在我的 Controller 的搜索功能中,我有这个
 vm.search = function() {
          $state.go('search', {q: vm.searchTerms});
...

一切正常,直到我尝试实现 UI 路由查询参数。我仍然可以获得搜索建议,从一个状态转换到另一个状态,但搜索中断。

我以为我需要在 config {} 中实现 Angular $http get params,但后来我意识到我只是在尝试使用 UI 路由器获取查询参数。似乎我已经使用 UI 路由器正确设置了所有内容以获取查询参数,但是......我做错了什么?

最佳答案

对于查询参数,您应该使用 $state.params 而不是 $stateParams
状态配置:

stateProvider.state({
    name: 'search',
    url: '/search?q',
    //...
}

Controller 来自:
function fromCtrl ($state) {
    $state.go('search', {q: vm.searchTerms});
}

或模板/HTML 链接来自:
<a ui-sref="search({q:'abc'})">my Link</a>

Controller 至:
function toCtrl ($state) {
    this.searchTerms = $state.params.q;
}

更新:使用 $transition$对于新版本 >= 1.0.0 ( PLUNKER DEMO )
上面两个版本的代码是一样的,只是需要修改toCtrl ...
function toCtrl ($transition$) {
  this.myParam = $transition$.params().q;
}

如果您的 searchTerms 是一个对象,您可以使用 JSON.stringify()JSON.parse()
如果您仍有任何疑问,请查看这些帖子:

How to extract query parameters with ui-router for AngularJS?

AngularJS: Pass an object into a state using ui-router

关于angularjs - UI 路由器和查询参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42258522/

相关文章:

Meteor Iron Router 将数组列表值作为参数传递

javascript - AngularJS - 在 ng-click 中的摘要循环后执行代码

javascript - $rootScope.$broadcast 在 AngularJS 中的用法

angularjs - Angular UI 路由器,如何从 Controller 获取当前状态的祖先列表?

javascript - URLSearchParams 可以让参数不区分大小写吗?

sql - Go 中的 Postgres 列表参数(使用 database/sql 和 pq)

javascript - 用于绘制具有对数刻度的条形图的 angularJS 库

angularjs - 恢复 AngularJs 中 $scope 变量的更改

javascript - 映射下拉列表选择 URL

angularjs - 使用 ui-router 解析延迟加载 angularjs Controller