1

JSON (JSONP ではない) を使用してローカル サーバーからデータを取得し、Angular UI ブートストラップと Angular を使用して先行入力で表示しようとしています。このサイトで見つけた他の例から timeout() と jsonp を機能させることができたので、約束が機能することを知っています。

function DepedencyCtrl($scope, $http, $timeout, filterFilter) {
...
$scope.typeahead = function(type, name) {
  return $http.get('pulldata', {params: {type: type, name: name}}).success(function(data){
    return filterFilter(data, name);
  }, 1000);
};  

このコードをデバッガーで実行すると、return filterFilter 行が実行されます。JSON 形式でデータを表示できますが、Angular コードをステップ実行するのに迷ってしまいます。足りないものはありますか?

4

1 に答える 1

1

httpの成功時に呼び出すコールバック関数をangularに提供しています。typeahead 関数が戻った後も、http 呼び出しは成功しています。JavaScript で理解しておかなければならない大きなことは、大量の非同期処理が行われていることです。http リクエストを開始し、コールバックを渡して、立ち去ります。angular の何かが最終的に成功関数を呼び出し、成功関数が返されると、Angular Land に戻ります。

Angular は、ほとんどのイベントで、変更を監視する必要があることがわかっている値/式の変更をチェックするという点で優れています。次に、それらの変更で発生する必要があるすべての動作を適用します。そのため、Angular にはこれを行う$digestという特別なプロセスがあります。この動作は、多くの場合、angular の「双方向バインディング」機能として請求されます。

次のようなAngularの双方向バインディングを利用したい:

$scope.typeaheadText = "";
$scope.typeahead = function(type, name) {
  return $http.get('pulldata', {params: {type: type, name: name}}).success(function(data){
    $scope.typeaheadText = data.typeaheadText;
  }, 1000);
};  

対応する HTML:

<span ng-controller="YourTypeaheadCtrl">
{{typeaheadText}}
</span>
于 2013-09-12T15:54:56.707 に答える