Angularjs,搜索表单,工厂:Button不起作用

时间:2013-06-03 18:21:33

标签: forms button service angularjs factory

我的Angularjs-app中有一个典型的带查询编辑器和搜索按钮。但是,单击搜索按钮不起作用。如果我最初使用表格打开表单,该服务将起作用。但不是在点击搜索按钮时。代码如下:

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 :(得分:0)

我通过更改控制器来实现它:

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

    }
    ]  );

这样就可以调用Factory VListLoader。