簡體   English   中英

更改網址后,角度模型不更改(更新)

[英]Angular model does not change(update) after changing url

解決方案: var deferred2 = $q.defer(); 這應該在方法_getSpecificPerson()內,因為當我訪問其他Person時,Alred承諾已解決。 這樣,我每次都會創建新的延遲對象。

我有一些清單,例如人員清單。 如果我訪問詳細信息頁面(不同的視圖,不同的控制器),我的網址是:#/ PersonDetails / 0c4274ed-ae76-4648-bba4-434a3040b9c5,但是當返回並想查看其他人的詳細信息時,我會像althougt之前一樣得到相同的頁面我可以看到我已經發送了獲取其他人的請求。 如果以前有一些數據填充,角度似乎會忽略新數據。 如果需要,這是相關的代碼:

 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(function(result) {我的控制器結果內部已緩存!(但是當我在工廠方法內部console.log(data.data)時,_getSpecific人員返回最新數據!

我一切都是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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM