2016-11-30 10 views
1

私は1.5とpython/mongodb apiで作業しています。 apiは正常に動作しています(一貫性があり速い)が、フォームを使用してページを読み込むと、データフィールドが空になることがあります。角度範囲の初期化が空の場合があります

アプリはui.routerを使用してchap州を正しいURLに関連付け、chapControllerを関連付けます。私はアドレスバーにそのURLを入力し、ページを読み込むためにリターンを押す。コントローラでは、path/to/apiがjsonデータを返します。

ここでは、コントローラの簡易版です。

angular.module('configurer') 
.controller('chapController', function($scope, $http, $state) { 
    var url='path/to/api'; 
    $http.get(url).success(function(data){ 
     $scope.data = data; 
    }); 

    $scope.save = function()({ 
     $http.post(url, $scope.data).success(function() { 
      $state.go('home', {reload:true}); 
     }); 
    }); 

ビューは次のようになります。

<button class="btn btn-primary" ng-click="save()">Save Changes</button> 
<form> 
    <div class="row"> 
    <div class="col-sm-3 form-group"> 
     <label for="name">Name</label> 
     <input class="form-control" id="name" type="text" name="name" ng-model="data.chap.name" /> 
    </div> 
    <div class="col-sm-9 form-group"> 
     <label for="title">Title</label> 
     <input class="form-control" id="title" type="text" title="title" ng-model="data.chap.title" /> 
    </div> 
    </div> 
</form> 

通常フォームはデータが移入アップしますが、時にはフィールドが同じを使用して(空白ですURL)。 ブラウザからページをリロードすると、ページが表示されますが、もちろんそれはユーザーの利便性に欠けます。

私は間違っていますか?

+0

$ scope.dataをで開始しようとします。 –

+0

私はここでそのドキュメントを見ていますが、私のコンテキストで使用する方法はわかりません:https://docs.angularjs.org/api/ng/directive/ngInit私のデータは大きなjsonオブジェクトです。 – Tim

答えて

0

リサーチプラス試行錯誤の後、私は答えがあると思います。スコープがデータにバインドしていないのは、データがないということです。私のサーバーは304の「変更されていない」応答を送信していました。

もちろんは存在しないデータでにバインドできませんでしたが、http応答はまだ成功としてカウントされていました。このように思えるのは、よくある「落ち着き」だろう。私の仕事は何

この

http.get(url, {cache:true}).success(function(data) { etc... 

私の推測のように、各http.getコールにconfigオブジェクトを追加するためにあなたはまた、HTTPリクエストヘッダにmax-agepublicを設定することができるとされているので、サーバーはできませんそれは最も効率的なものとは思われなかったので、私はクライアント上でキャッシュを使用していたので、サーバは悩まされていませんでした。

これは私のために働いていますが、問題が再度ポップアップすると、私は再ポストします。

0

ui.routerを使用しているので、これにはresolveを使用することをおすすめします。

例:

$stateProvider 
    .state('chap', { 
    // ... 
    resolve: { 
     data: function($http){ 
     return $http.get(...); 
     } 
    } 
    }); 

とあなたのコントローラで:

angular 
    .module('configurer') 
    .controller('chapController', function(data, $scope, $http, $state) { 
    $scope.data = data; 
    } 
+0

今日は失敗することはできません、私は再現できるときに戻ってきます。私は今解決について読んでいます。それはネストされた州の場合のようですが、私はそれらのどれも持っていません。 – Tim

+1

resolveは、その特定の状態に移行する前にデータが存在することを確認したい状態に役立ちます。ビューに負荷オーバーレイがあり、データが解決されるまでビュー全体をブロックしたい場合は、非常に関係します。 – jusopi

0

時々データがスコープと結合しません。この行を含めて確認できますか?

$scope.data = data; 
$scope.$apply(); 

内部で成功ハンドラを確認してください。 わかりませんが、動作する可能性があります。試してみてください

+0

ありがとうございますが、docはhttpコールが$ scope.applyで終了すると言っています:http://jimhoskins.com/2012/12/17/angularjs-and-apply.htmlそれでも問題を再現できるようになると、それが助けになるかどうかわかります。 – Tim

関連する問題