简体   繁体   English

角度:从工厂更新范围不起作用

[英]Angular : Update scope from factory not working

I have a factory : 我有一家工厂:

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).");
            });
        }
    }

});

And also a controller : 还有一个控制器:

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();

}); 

My view is not updated and still, the ajax call is ok. 我的视图未更新,但仍然可以执行ajax调用。 (checked with firebug, i have the json returned). (检查萤火虫,我有返回的JSON)。

Here's the code of my view : 这是我认为的代码:

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

I don't have any error but my view only display "TEST". 我没有任何错误,但是我的视图仅显示“ TEST”。

Do you have any idea why ? 你知道为什么吗?

Thanks 谢谢

your getListeIncendies should looks like this: 您的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).");
    });
},

Note var scope = this; 注意var scope = this; and scope.incendies = data; scope.incendies = data; Then in your controller 然后在您的控制器中

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

You can't return from an AJAX call, it async! 您无法从AJAX调用返回,它是异步的! Instead, return the actual $http request and use .then and assign your data in the controller 相反, 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).");
    });
},

And your controller: 和您的控制器:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM