1

私はリストを表示した直後にlist.htmlに行くと、リストが表示されます。私は最初にform.htmlに行き、次にlist.htmlに戻って、それから私にリストを渡す必要があります。私はコントローラで$ httpの機能を持っていたときに私は望んだように働いたが、今は彼らが以前と同じように動作しないようにしている。あなたはそれを呼び出すときAngularJS ng-initが動作しない

app.js

app.service("dataservice", function($http){ 

    var list = [{}]; 

    this.get = function(){ 
     $http.get("harjoitus22/backend.php").success(function(response){ 
      list = response; 
     }); 
    }; 

    this.save = function(newcontact){ 

     $http({ 
      method: 'post', 
      url: 'harjoitus22/backend.php', 
      data: newcontact, 
      header: 'Access-Control-Allow-Origin: *' 
     }).success(function(response){ 
      list = response;    
     });   
    }; 

    this.give = function(){ 
     return list; 
    }; 
}); 

app.controller("mainController", function($scope, $location, dataservice){ 

    $scope.save = function(){  
     dataservice.save($scope.newcontact); 
     $scope.newcontact = {}; 
     $location.path("/list"); 
     $scope.list = dataservice.give(); 
    }; 

    $scope.get = function(){ 
     dataservice.get(); 
     $scope.list = dataservice.give(); 
    }; 
}); 

するlist.html

<tbody ng-init="get()"> 
     <tr ng-repeat="object in list"> 
      <td>{{object.nimi}}</td> 
      <td>{{object.email}}</td> 
      <td>{{object.ruoka}}</td> 
      <td>{{object.sauna}}</td> 
     </tr> 
    </tbody> 

答えて

3

$http呼び出しは、非同期に動作しますが、それはあなたが次の行の実行に応答与えることはありません。そのアヤックスを見守るには、promiseの返品を$httpメソッドで行うべきです。あなたがサービスgetメソッドから約束のオブジェクトを返す必要が同じことを達成するため

$httpの方法は、あなたがその .then機能の中にまで入れて、あなたのコードを実行するのに役立ちますリターンの約束のオブジェクトを、行います)。

サービス

this.get = function(){ 
    return $http.get("harjoitus22/backend.php").then(function(res){ 
     list = res.data; 
    }); 
}; 

コントローラ

dataservice.get().then(function(){ 
    $scope.list = dataservice.give(); 
}); 
+1

ない "でした" が、 "すべきである" 笑 –

+1

@AndrewDonovan笑:Dは固定。 :pヘッドアップの男性のためにありがとう.. –

+1

haha​​ no probs! –

関連する問題