更改URL后,角度模型不会更改(更新)

时间:2014-07-25 11:48:28

标签: javascript angularjs

解决方案:var deferred2 = $q.defer();这应该在方法_getSpecificPerson()内部,因为当我访问alredy中的其他Person promise时解决了。这样我每次都会创建新的延迟对象。

我有一些列表,例如人员列表。如果我访问详细信息页面(不同的视图,不同的控制器)我有像:#/ PersonDetails / 0c4274ed-ae76-4648-bba4-434a3040b9c5,但当一个返回,并希望看到一些其他人的详细信息,我得到像althougt之前相同的页面我可以看到我已经发送了获取其他人的请求。如果之前填充了一些数据,则angular似乎忽略了新数据。 如果需要,这是相关代码:

 personModule.controller("PersonDetailsController", function ($scope, $http, dataService, $routeParams) {


var id = $routeParams.PersonId;
var myPromise = dataService.getSpecificPerson(id);
myPromise.then(function (result) {
    var returnedPerson = result;
    if (returnedPerson.AllXml) {
        $scope.OnePerson = JSON.parse(returnedPerson.AllXml);
    }

});

});

   personModule.factory('dataService', function ($http,$q) {

  var deferred = $q.defer();
 var deferred2 = $q.defer();
    var _getPersons= function() {

        $http.post(ROOT + 'Home/GetPersons').
            then(function(data, status, headers, config) {

                deferred.resolve(data.data);

            },function () {
            deferred.reject();
        });
        return deferred.promise;
    }

    var _getSpecificPerson = function (id) {
        var dataString = {
            id:id
        }
        $http.post(ROOT + 'Home/GetPerson', dataString).
           then(function (data, status, headers, config) {
               deferred2.resolve(data.data);
           }, function () {
               deferred2.reject();
           });
        return deferred2.promise;
    }
return {
    getPersons: _getPersons,
    getSpecificPerson:_getSpecificPerson
    }

}); 我尝试将我的范围分配放在$ scope内。$ apply()但我得到$ digest已在进行中: $ digest已在进行中 编辑:工厂函数从服务返回好的数据,但当我做myPromise.then(函数(结果){在我的控制器结果内部被缓存!(但当我在工厂方法中的console.log(data.data)它_getSpecific人返回迄今为止的数据!

1 个答案:

答案 0 :(得分:0)

我应该能写的所有JSON都是

$scope.OnePerson = returnedPerson.AllXml;

您也可以简化服务

var _getSpecificPerson = function (id) {
    var dataString = { id:id };
    return $http.post(ROOT + 'Home/GetPerson', dataString);
}

因为post方法返回一个promise。 在您的控制器中,您必须进行此更改才能使其正常工作:

var returnedPerson = result.data;