AngularJS - 在$ routeProvider中更改查询参数项?

时间:2013-09-22 16:52:40

标签: angularjs controller factory route-provider

我正在创建导航,当处于活动链接时,Feed会加载但搜索的术语不同。

基本上,所有链接都是相同的,唯一的区别是.factory参数中设置的术语。

因为一切都是一样的(即使是.controller,是否可以在routeProvider中设置查询项,我可以指定需要搜索的术语?

或者唯一的方法是为每个链接创建一个新的控制器,并在那里设置术语?保持代码简单,高效,尽可能少,是我的目标。

  angular.module('termSearch', ['ngResource'])

  .config(['$httpProvider', function ($httpProvider) {
      $httpProvider.defaults.headers.common["X-Requested-With"] = undefined;
  }])

  .config(function($routeProvider) {
    $routeProvider
      .when('/term1', {templateUrl: 'views/feedlist.html', controller: 'searchtermCtrl' })      
      .when('/term2', {templateUrl: 'views/feedlist.html', controller: 'searchtermCtrl' })

      .otherwise({redirectTo: '/term1'});
  })

  .factory('Feed', function ($resource) {
      return $resource('https://www,example.com/:term/json', {}, {
          query: {
              method: 'GET',
              isArray: false,
              params: {
                  term: "term#"
              }
          }
      });  
  })

  .controller('searchtermCtrl', function($scope, Feed){
    $scope.results = Feed.query();
    $scope.feed = function (term) {
        Feed.get({
            term: term
        }, function (results) {
            $scope.results = results
            console.log(results);
        });
    }
  })

感谢您在正确的方向上提供任何帮助。

大鹏。

1 个答案:

答案 0 :(得分:1)

使用资源占位符和$ routeParams,您可以定义一个类似于此<a href="#term/search+term+here">Term X</a>的哈希URL。搜索词可以是用户输入或来自数据库的术语列表

  angular.module('termSearch', ['ngResource'])

  .config(['$httpProvider', function ($httpProvider) {
      $httpProvider.defaults.headers.common["X-Requested-With"] = undefined;
  }])

  .config(function($routeProvider) {
    $routeProvider
      .when('/term/:q', {templateUrl: 'views/feedlist.html', controller: 'searchtermCtrl' })      

      .otherwise({redirectTo: '/term/'});
  })

  .factory('Feed', function ($resource) {
      return $resource('https://www.example.com/:term/json', {}, {
          query: {
              method: 'GET',
              isArray: false
          }
      });  
  })

  .controller('searchtermCtrl', function($scope, Feed, $routeParams){
    $scope.feed = Feed.query({ term : $routeParams.q }); // This will get the term from url
  })

现在,当路由更改为新术语时,资源将发送新数据参数