2013-06-03 39 views
0

我有一个典型的带查询编辑器和搜索按钮,即我的Angularjs应用程序。但是,单击搜索按钮不起作用。如果我最初使用表格打开表格,则该服务有效。但是当点击搜索按钮时不行。代码如下:Angularjs,搜索表单,工厂:按钮不起作用

HTML vlist.html:

<input ng-model="nachname" type="text" id="nachname" name="nachname" class="search-query" /> 
<button ng-click="search()" type="submit" class="btn btn-primary">Search</button> 
... 
<tr ng-repeat="pers in personen"> 
    <td>{{pers.nachname}}</td> 
</tr> 
... 

控制器:

var app = angular.module('cdemoApp', [ 'cdemo.services' ]); 

app.config(['$routeProvider', function($routeProvider) { 
    $routeProvider. 
    when('/vlist', { 
     controller: 'VListCtrl', 
     resolve: { 
      personlistdto: function(VListLoader) { 
       return VListLoader(); 
      } 
     }, 
     templateUrl : 'app/view/vlist.html' 
      }).otherwise({ redirectTo: '/' }); 
} ]); 

app.controller('VListCtrl', [ '$scope', 'personlistdto', 
              function($scope, personlistdto ) { 
    $scope.search = function(){ 
      $scope.personen = personlistdto.aaData; 
      $scope.iTotalRecords = personlistdto.iTotalRecords; 
     }; 
    $scope.search(); 
}]); 

服务:

var services = angular.module('cdemo.services', [ 'ngResource' ]); 

services.factory('Vers', [ '$resource', 
          function find($resource) { 
    return $resource('/cdemo/rest/vers/ajs/:id', 
      { id: '@id', isArray: false } 
    ); 
} ]); 


services.factory('VListLoader', [ 'Vers', '$q', 
             function(Vers, $q) { 
    console.log('Vloader1'); 
    var find = function find() { 
     var delay = $q.defer(); 
     Vers.get(function(personlistdto) { 
      delay.resolve(personlistdto); 
     }, function() { 
      delay.reject('Nix fetch'); 
     }); 
     return delay.promise; 
    }; 

    return find; 
} ]); 

任何想法,我怎么能得到的搜索按钮(包括字段/参数) - 因为单击按钮时没有任何反应?谢谢你的回答。

+1

'

'内是''和'
+0

点击处理程序应该在VListCtrl中,并用搜索字段调用VListLoader - 但我不知道该怎么做。 –

+0

我只是猜测你想要一个名字在你的列表中的搜索字段。如果是这样,该按钮不是必需的,你可以很容易地过滤你的内容。 [这是一个plunk](http://plunker.co/edit/ObiTzrBxa58gCEfOLpHr?p=preview),演示了基本的过滤器。这不回答“按钮不起作用”,但它可能会给出预期的结果。 – rGil

回答

0

我得到它的工作通过改变控制是这样的:

app.controller('VListCtrl', [ '$scope', 'personlistdto', 'VListLoader', 
               function($scope, personlistdto, VListLoader ) { 
     $scope.personlistdto = personlistdto; 
     $scope.searchFactory = VListLoader; 
     $scope.search = function(){ 
      $scope.personlistdto = $scope.searchFactory(); 
     }; 

    } 
    ] ); 

这样的工厂VListLoader被调用。