【问题标题】:Refresh resource query on click in angular factory?在角度工厂中单击刷新资源查询?
【发布时间】:2016-02-26 07:57:04
【问题描述】:

我开始学习 angularJS,但我一直在弄清楚如何将变量传递给工厂并在点击事件时刷新资源。

具体来说,我不知道如何将搜索变量从表单字段传递到工厂,而不是硬编码的“???”进入参数:{query:'???'} ...然后,在提交时,应该使用该搜索参数再次获取资源...我尝试在那里使用“searchterms”变量,但它输出“searchterm”未定义控制台。

    <html ng-app="notmuchApp">
  <head>
    <meta charset="utf-8">
    <title>notmuch sinatra</title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css">
    <script src="js/angular.js"></script>
  <script src="js/angular-resource.js"></script>
  <script src="js/ui-bootstrap-tpls-1.1.2.js"></script>
    <script>

  var notmuchApp = angular.module('notmuchApp', ['ui.bootstrap','ngResource']);
  notmuchApp.controller('handleSearch', ['$scope', 'getSearch',
    function ($scope, getSearch) {
        $scope.searchresults = getSearch.query();
    }]);

  notmuchApp.factory('getSearch', function ($resource) {
    return $resource('/notmuch/search', {}, {
        query: { method: 'GET', params: {query:'???'}, isArray: true },
    })
});

  </script>
  </head>
 <body >
  <div ng-controller="handleSearch">
  <form ng-submit="getSearch">
    <input type="text" ng-model="searchterm"> 
    <input type="submit" value="Search">
  </form>
    Results:
    <ul>
      <li ng-repeat="searchresult in searchresults">
         {{searchresult.date_relative}} {{searchresult.authors}} {{searchresult.subject}}
      </li>
    </ul>
  </div>
</body>
</html>

【问题讨论】:

    标签: angularjs ngresource


    【解决方案1】:

    通常,您的工厂不会直接返回结果,而是返回具有“getSearch”方法的“服务”对象:

      notmuchApp.controller('handleSearch', ['$scope', 'SearchService',
      function ($scope, SearchService) {
          SearchService.getSearch("aaa","bb").then(
            function(results) {
              $scope.searchresults = results;
            },
            function(error) {
              // display error message
            }
          );
      }]);
    
    notmuchApp.factory('SearchService', function ($resource) {
      return {
        getSearch : function(param_a, param_b) {
            // do your ajax with param a and b
            return results
        }
    });
    

    另外,您处于异步执行的世界,所以我冒昧地将您的代码从“$scope.results = getResults()”更改为正确处理承诺(加上错误处理)。

    【讨论】:

      猜你喜欢
      • 2015-03-16
      • 2020-03-18
      • 1970-01-01
      • 1970-01-01
      • 2018-11-13
      • 1970-01-01
      • 2016-07-27
      • 1970-01-01
      • 2015-11-26
      相关资源
      最近更新 更多