2013-06-03 63 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被調用。