Angular:从工厂更新范围不工作

时间:2015-03-03 17:07:58

标签: javascript angularjs

我有一家工厂:

simuApp.factory('Incendie', function($http) {

    return {
        // liste des incendies
        incendies : [],

        // fonction pour récupérer la liste des incendies
        getListeIncendies : function() {

            $http.get(site_url+'gestionnaireFeu/listeIncendies').
            success(function(data, status, headers, config) {
                // si liste retournée, on enregistre
                incendies = data;
                return data;
            }).
            error(function(data, status, headers, config) {
                console.log("Un problème est survenu. (service incendie : getListeIncendies).");
            });
        },

        // fonction pour supprimer un incendie donné
        supprimerIncendie : function(IDIncendie) {
            $http.get(site_url+'gestionnaireFeu/supprimerIncendie/'+IDIncendie).
            success(function(data, status, headers, config) {
                // si liste retournée, on enregistre
                this.incendies = data;
            }).
            error(function(data, status, headers, config) {
                console.log("Un problème est survenu. (service incendie : supprimerIncendie).");
            });
        },

        // fonction pour ajouter un incendie
        ajouterIncendie : function(newIDIncendie) {
            $http.get(site_url+'gestionnaireFeu/creerIncendie/'+newIDIncendie).
            success(function(data, status, headers, config) {
                // si liste retournée, on enregistre
                incendies = data;
            }).
            error(function(data, status, headers, config) {
                console.log("Un problème est survenu. (service incendie : ajouterIncendie).");
            });
        }
    }

});

还有一个控制器:

simuApp.controller('incendieController', function($scope, $http, Incendie) {

    // liaison du scope avec le service incendie
    //$scope.incendies         = Incendie.incendies;

    $scope.incendies         = Incendie.getListeIncendies();

    $scope.updateIncendies = function() {
        $scope.incendies = Incendie.getListeIncendies();
    }

    // $scope.getListeIncendies = Incendie.getListeIncendies();
    // $scope.ajouterIncendie   = Incendie.ajouterIncendie();
    // $scope.supprimerIncendie = Incendie.supprimerIncendie();

}); 

我的视图没有更新,但是,ajax调用还可以。 (用firebug检查,我已经退回了json)。

以下是我的观点代码:

<div ng-controller="incendieController">
    TEST
    <div ng-repeat="incendie in incendies">
        incendies : {{ incendie.idFeu }}
    </div>
</div>

我没有任何错误,但我的观点仅显示&#34; TEST&#34;。

你知道为什么吗?

由于

2 个答案:

答案 0 :(得分:1)

您的getListeIncendies应如下所示:

getListeIncendies : function() {
    var scope = this;
    return $http.get(site_url+'gestionnaireFeu/listeIncendies').
    success(function(data, status, headers, config) {
        // si liste retournée, on enregistre
        scope.incendies = data;
        return scope.incendies;
    }).
    error(function(data, status, headers, config) {
        console.log("Un problème est survenu. (service incendie : getListeIncendies).");
    });
},

注意var scope = this;scope.incendies = data; 然后在你的控制器

Incendie.getListeIncendies().then(function(response) {
    $scope.incendies = response;
});

答案 1 :(得分:1)

你无法从AJAX调用返回,它是异步的!相反,return实际$http请求并使用.then并在控制器中分配您的数据

getListeIncendies : function() {
    return $http.get(site_url+'gestionnaireFeu/listeIncendies').then(function(result) {
        // si liste retournée, on enregistre
        return result.data;
    }, function(err) {
        console.log("Un problème est survenu. (service incendie : getListeIncendies).");
    });
},

你的控制器:

Incendie.getListeIncendies().then(function(data) {
    $scope.incendies = data;
});