2017-04-15 9 views
0

私はangle uib-aheadaheadを使用しているアプリを持っています。uib-typeaheadでのAngularJsフィルタリングが機能していません

データはajaxコールによってリモートにロードされます。

私は$ viewValue文字列を含む「名前」との結果のみを表示する結果をフィルタリングする必要があります。

ここに私のコードです。私の問題は、データが決してフィルタリングされないということです。

私は間違っていますか?

//マークアップ

<input type="text" ng-model="modelo.tuss" placeholder="Select TUSS" 
    uib-typeahead="item as item.name for item 
    in getTabelaTUSS($viewValue) | filter:{name:$viewValue}" 
class="form-control"> 

//コントローラ

angular.module("clinang").controller('exameCtrl',['$scope', function($scope) { 
     var prof=[{"id":1,"name":"John Prof"}, 
     {"id":2,"name":"Mary Prof"}]; 

     $scope.getTabelaTUSS = function(val) { 
     return dataService.getTabelaTUSS().then(function(response){ 
      return prof; //only to simulate results to test 
    }); 
    }; 

}]); 

更新コントローラー:

//first option - geting rid off view filter and making local filter in controller 
angular.module("clinang").controller('configAgendaAddProcedimentosCtrl',['$scope','dataService','$state','$filter',function($scope,dataService,$state,filter){ 
     $scope.getTabelaTUSS = function(val) { 
     return dataService.getTabelaTUSS().then(function(response){ 
       return filterFilter(response.data, val); 
     }); 
     }; 
}]); 

//second option - using view filter and no local filter in controller 
//I also tried without success 
angular.module("clinang").controller('configAgendaAddProcedimentosCtrl',['$scope','dataService','$state','$filter',function($scope,dataService,$state,filter){ 
     $scope.getTabelaTUSS = function(val) { 
     return dataService.getTabelaTUSS().then(function(response){ 
       return response.data; 
     }); 
     }; 
}]); 

答えて

0

あなたはreturn prof;と、次のブロックを交換する場合は、予想通り、それは動作します私がで実証しているように210

return dataService.getTabelaTUSS().then(function(response){ 
    return prof; //only to simulate results to test 
}); 

あなたreturnステートメントを使用して問題は、それがdataService.getTabelaTUSS().then()呼び出しによって返された約束のオブジェクトを返します。これを修正するには、profthenに戻すのではなく、profをスコープ変数に割り当てて、ビューで使用します。

+0

はご回答いただきありがとうございます。私はより良く説明します。私はコメントしたコードで言ったように、プロフェッショナルのみを使ってテストを行いました。私は本当に約束から "response.data"が必要で、ビューやコントローラに "viewValue"を使ってフィルタ "response"が必要です。 –

+0

@LuizAlves私は理解して、私の提案を適用することもできます。スコープ変数に 'response.data'を割り当て、あなたのビューでそれを使用してください。 – Hoa

+0

こんにちは、それは動作しません。私はコントローラとしてフィルターを試しました:$ scope.getTabelaTUSS = function(val){ return dataService.getTabelaTUSS()。(function(response){ return filterFilter(response.data、val); }); }; または「return response.data;」を使用して表示するしかし、何も動作しません。 –

0

あなたはdataService.getTabelaTUSS()メソッドを呼び出しているが、あなたはあなたのコントローラでdataServiceを注入したことがありません。次のように

は、あなたのコントローラでdataServiceを注入します。

angular.module("clinang").controller('exameCtrl',['$scope','dataService' function($scope,dataService) { 
    var prof=[{"id":1,"name":"John Prof"}, 
    {"id":2,"name":"Mary Prof"}]; 

    $scope.getTabelaTUSS = function(val) { 
     return dataService.getTabelaTUSS().then(function(response){ 
      return prof; //only to simulate results to test 
    }); 
    }; 

}]); 

注:お使いのHTMLコード内dataServiceサービスファイルを含めることを忘れないでください。

また、dataService.getTabelaTUSS()メソッドresponseを使用していないコードが表示された場合は、profオブジェクトが返されます。したがって、サービスからのデータが必要ない場合は、次のようにメソッドを更新してください。

$scope.getTabelaTUSS = function(val) { 
    return prof; 
} 
+0

ありがとうございます。私はdataServiceを使用します。単純化のために、私はそれを断言しました。上記のように、私は実際に約束から "response.data"が必要です。また、ビューまたはコントローラに "$ viewValue"を使用してフィルタ "response"が必要です。 –

+0

"応答"をフィルタリングしたい場合は、上記のようにdataServiceを注入します。 –

関連する問題