【问题标题】:Get URL parameters condition获取 URL 参数条件
【发布时间】:2015-10-30 09:48:41
【问题描述】:

如何为 URL 参数的名称和开始日期设置条件“过滤器”?我这里有一个工作代码。问题是,如果您键入名称搜索字段“名称”。开始日期本身也会给出一个值。我认为是因为在绑定 URL 时使用了“&”分隔符。任何人都可以对这里有建议吗?

    Name:<input type="text" class="form-control" ng-model="name" />
Start Date:<input type="text" class="form-control" ng-model="date" />
<button ng-click="search(name,date)" class="blue_button" >search</button>

功能:

    var myTable=angular.module('myTable',[]);
      myTable.controller('tableCtrl',function($scope,$http){
      $http.get("http://staging.api.sample.com/events.json", {headers: {Authorization: 'vuNYhXbpKfH73IjSw856PnGUyOAlmgTW'}})
       .success(function(response) {
          debugger
        $scope.members=response.events;
         $scope.totals = response.paging;
      });

    $scope.search=function(name,date){
         $http.get("http://staging.api.sample.com/events.json?name="+name+"&start_date_from="+date, {headers: {Authorization: 'vuNYhXbpKfH73IjSw856PnGUyOAlmgTW'}})
       .success(function(response) {

        $scope.members=response.events;
         $scope.totals = response.paging;
      });

      }
  });

【问题讨论】:

  • 无法理解问题。您需要提供更多背景信息 - 您似乎是从问题的中间开始
  • 抱歉。是的,我确实对我的表列表有疑问。如果您在过滤器“名称”上键入名称,则 Url 将是 undefined 。但是,如果您要再次搜索名称。,它可以工作。

标签: json angularjs parameters filter


【解决方案1】:

当您要触发请求时,能否使用字符串生成器?

$scope.search=function(name,date){
     var requestParams = '?';
     if(name) requestParams += "name= " + name;
     if(name && date) requestParams += "&"
     if(date) requestParams += "start_date_from=" + date;
     // you may want to remove the trailing & if date is not provided

     $http.get("http://staging.api.sample.com/events.json" + requestParams, {headers: {Authorization: 'vuNYhXbpKfH73IjSw856PnGUyOAlmgTW'}})
   .success(function(response) {

    $scope.members=response.events;
     $scope.totals = response.paging;
  });

  }

我还建议将数据调用拉入角度服务。

【讨论】:

  • 。我确实有 2 个过滤器 1 用于名称和 1 用于开始日期我的问题是,如果您尝试搜索名称“仅”,请说“约翰”。该程序将无法运行。我查了一下网络,发现网址是HTTP://STAGING.API.SAMPLE.COM/…
  • 但如果要再次搜索名称和开始日期,代码将运行。只有第一次尝试有问题​​
  • 我试过你的代码。没有任何反应,但这是个好主意。我不知道第一次尝试有什么问题
  • 最后我配置了你的代码 @jonosma 唯一的问题是 URL 不加载。就像我输入名字 john 一样,URL 就像。 "http blah /events.json?name=john&" 可能是因为 "&"
  • 当我查看 NETWORK 但它没有加载 requestParams 时,URL 是怎么回事
【解决方案2】:

使用提供 $resource 对象的服务。

angular.module('myTable')
.factory('Api', function($resource) {
   var BASE_URL = 'http://staging.api.sample.com';

   var events = $resource(BASE_URL + '/events.json', {}, {
     get: {
       method: 'GET',
       cache: true,
       headers: {
         'Authorization': '....'
       }
     }
   });

   return {
     Events: events
   };
});

将服务添加为依赖项并设置可选参数。将不会设置具有未定义值的参数(如果名称、日期或两者都丢失)

angular.module('myTable')
.controller('tableCtrl',function($scope,$http, Api) {
   $scope.search=function(name,date) {
     Api.Events.get({
       'name': name,
       'date': date
     }).$promise.then(function(successResponse) {
         //Handle success here
     }, function(err) {
         //Handle error here
     });
   };
});

注意:angular.module('myTable',[]) 重新声明了 myTable 模块。请参阅AngularJS module documentation 的创建与检索部分。相关位:

请注意,使用 angular.module('myModule', []) 将创建 模块 myModule 并覆盖任何名为 myModule 的现有模块。采用 angular.module('myModule') 检索现有模块

【讨论】:

  • 感谢@WeNeigh 的代码,但你的代码对我来说很难理解,。我试图替换上面帖子中的功能并输入代码。但什么也没发生。 .i 确实有 2 个过滤器 1 用于名称和 1 用于开始日期我的问题是,如果您尝试搜索名称“仅”,请说“约翰”。该程序将无法运行。我检查了网络,发现 URL 是 HTTP//STAGING.API.SAMPLE.COM/events.json?name=john&start_date_from= undefined
  • 但如果我要再次搜索名称和开始日期,代码将运行。只有第一次尝试有问题​​
  • 你能把代码改成这个吗? 'name': name || '', 'date': date || ''
猜你喜欢
  • 2016-04-05
  • 2021-08-17
  • 1970-01-01
  • 2015-02-08
  • 2020-09-19
  • 2015-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多