AngularJS ng-init不起作用

时间:2016-05-13 13:39:24

标签: javascript angularjs angular-promise angularjs-http ng-init

当我在加载页面后立即转到list.html时,它不会显示列表。我需要首先访问form.html,然后返回list.html然后它会给我列表。当我在控制器中有$ http功能时,它按照我的意愿工作,但现在他们在服务中,他们不像以前那样工作。

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>

1 个答案:

答案 0 :(得分:3)

$http调用异步工作,当你调用它时,它不会在下一行执行时给你响应。要密切关注该ajax,您应该使用promise方法返回$http

为了实现同样的目标,您需要从服务get方法返回promise对象($http方法确实返回了promise对象,这可以帮助您通过在{{1}中添加代码来执行代码} function's)。

<强>服务

.then

<强>控制器

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