0

私の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;
} ] );

ボタンをクリックしても何も起こらないため、ボタン検索(フィールド/パラメーターを含む)を取得する方法はありますか? 答えてくれてありがとう。

4

1 に答える 1

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 が呼び出されます。

于 2013-06-07T08:13:21.117 に答える