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 вызов работает асинхронно, когда вы называете его, это не даст вам ответ на следующей казни линии. Чтобы следить за этим ajax, вы должны использовать promise return by $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! –

Смежные вопросы