将参数传递给angularjs中的资源工厂从控制器到数据库中的搜索

时间:2015-05-25 10:51:36

标签: javascript angularjs node.js express meanjs

说明

我在视图中有一个文本框,可以选择要显示的模型。 我需要将一个变量从视图传递到角度资源工厂,然后传递给服务器控制器以决定应该将哪个模型传递给客户端控制器。

如您所见,我将名为 issuename 的变量传递给资源,然后我希望通过此参数的大小在控制器中选择模型。

我在视图中的文本框中输入牛仔裤,这意味着 issuename 应该等于牛仔裤,它应该给我相同的结果,就像我指定 searchParam 的值一样手动给牛仔裤。

但似乎没有正确传递,因为当我在服务器控制器中注释掉该行时,我再也看不到牛仔裤模型了。

我试过了:

  1. req.body.issuename
  2. req.params.issuename
  3. req.issuename
  4. 仍然没有工作所以应该有另一个问题

    提前感谢您的帮助!

    代码部分

    客户服务($资源)

    angular.module('alls').factory('Alls', ['$resource', function($resource) {
    return $resource('alls/:issuename', {},
        {
          get:{ method: 'GET', isArray:true }
        });
    }]);
    

    客户端控制器

    angular.module('alls').controller('AllsController', ['$scope', '$stateParams', '$location', 'Authentication', 'Alls', 'Jeans',
    function($scope, $stateParams, $location, Authentication, Alls, Jeans) {
    
          $scope.search = function(){
                Alls.get({issuename: $scope.issueinput},function(response){
                    $scope.alls = response;
                });
         }; 
    };
    

    客户视图

    <section data-ng-controller="AllsController">
    <div class="page-header"> 
        <h1>Alls</h1></div>
        <div class="Search">
            <h2>Search Section</h2>
            <label>Search</label> :  <input data-ng-model="issueinput"></input> {{issueinput}}
            <button data-ng-click="search()">Search</button>
        </div>
    
        <br></br><br></br>
        <h2>Result Section</h2>
    
        <div class="list-group">
            <table class="table table-striped table-bordered">
                <thead>
                    <tr>
                        <th>Name</th>
                        <th>Color</th>
                    </tr>
                </thead>
                <tbody>
                    <tr data-ng-repeat="all in alls">
                        <td data-ng-bind="all.name"></td>
                        <td data-ng-bind="all.color"></td>
                    </tr>
                </tbody>
            </table>
        </div>
    </div>
    

    服务器控制器

    exports.list = function(req, res) {
    
        var searchParam = req.body.issuename;
    
        searchParam = 'Jeans';  // Comment Out or Not //
    
        mongoose.model(searchParam).find().sort('-created').populate('user', 'displayName').exec(function(err, alls) {
            res.jsonp(alls);
        });
    };
    

1 个答案:

答案 0 :(得分:1)

我认为你需要通过&#34; issuename&#34;通过&#34; @&#34; -notation在$ resource声明中的参数。 像这样:

angular.module('alls').factory('Alls', ['$resource', function($resource) {
return $resource('alls/:issuename', {issuename: '@issuename'},
    {
      get:{ method: 'GET', isArray:true }
    });
}]);

这将告诉您的资源采取财产&#34; issuename&#34;来自您致电Alls.get({issuename: $scope.issueinput}

时发布的对象

您可以在$resource docs

中详细了解相关内容