在解析承诺后,视图未在angularjs中更新

时间:2016-07-10 09:35:56

标签: angularjs scope factory

我有一个工厂从服务器获取数据并传递给控制器​​,许多控制器正在从工厂调用get方法,但只有控制器的范围变量首先调用工厂而不是所有...这里是我的工厂代码

(function () {
angular.module('myapp').factory('agendaFactory', ['$http', '$q', function ($http, $q) {
    var user = "";
    var defer = $q.defer();
    var agenda = {
        getAll: function (tempData, addType) {
            $http.post('/api/' + addType + '/getAll', tempData).success(function (data, status) {
                console.log(addType, data);
                //console.log(status);
                defer.resolve(data);

            }).error(function (err, status) {
                console.log(err, status);
                defer.reject(status);
            });
            return defer.promise;
        }
    };
    return agenda;
}]);
}());

这是两个控制器呼叫它们。

changeData = function (data) {
            console.log("called function in liffe");
            $scope.lifetimeData = data;
        }
        agendaFactory.getAll(tempData, addType).then(function (data) {
                console.log('lifeData', data);
                changeData(data);
                return;
            }, function (err) {
                console.log('today err', err);
            })

和第二个控制器

changeData = function (data) {
                console.log("called function in year");
                $scope.yearData = data;
            }
            agendaFactory.getAll(tempData, addType).then(function (data) {
                console.log('yeardata', data);
                changeData(data);
                return;
            }, function (err) {
                console.log('today err', err);
            });

但只有第一个控制器的数据正在视图中更新

1 个答案:

答案 0 :(得分:0)

删除promise包装器,因为$http已经返回一个promise。还要删除成功/错误处理程序,因为它们已被弃用。

(function () {
angular.module('myapp').factory('agendaFactory', ['$http', '$q', function ($http, $q) {
    var user = "";
    var agenda = {
        getAll: function (tempData, addType) {
            return $http.post('/api/' + addType + '/getAll', tempData);
        }
    };
    return agenda;
}]);
}());

然后,您可以处理控制器中的成功/错误条件