Javascript AngularJS中的模型绑定不同步
我有一个AngularJS应用程序,我正在重写它,以便与Javascript AngularJS中的模型绑定不同步,javascript,angularjs,Javascript,Angularjs,我有一个AngularJS应用程序,我正在重写它,以便与工厂一起使用。我遇到的一个问题是延迟的ng模型,它第一次正确更新,但在后续API调用后更新时会失去同步 我做了一些挖掘,发现这是如何解决这个延迟,但没有用。为了避免无休止的if-else块,我用字符串为模型编制了索引: var _brands = { 'brand1': [{ rank: '1' }, { rank: '2' }, { rank: '3' }], 'brand2': [{ rank: '1'
工厂一起使用。我遇到的一个问题是延迟的ng模型,它第一次正确更新,但在后续API调用后更新时会失去同步
我做了一些挖掘,发现这是如何解决这个延迟,但没有用。为了避免无休止的if-else块,我用字符串为模型编制了索引:
var _brands = {
'brand1': [{ rank: '1' }, { rank: '2' }, { rank: '3' }],
'brand2': [{ rank: '1' }, { rank: '2' }, { rank: '3' }],
'brand3': [{ rank: '1' }, { rank: '2' }, { rank: '3' }],
// ~10 more
};
在默认状态下,模型更新良好。如果模型中已经填充了数据,问题就会出现
假设我有:
var _brands = {
'brand1': [{ID: '234', location: 'Vermont', isStarred: false, rank: '1' }, { rank: '2' }, { rank: '3' }],
'brand2': [{ rank: '1' }, { rank: '2' }, { rank: '3' }],
'brand3': [{ rank: '1' }, { rank: '2' }, { rank: '3' }],
// ~10 more
};
更新客户端的值后,API调用返回的数据为:
var _brands = {
'brand1': [{ rank: '1' }, {ID:'956', location:'Hawaii', isStarred: true, rank: '2' }, { rank: '3' }],
'brand2': [{ rank: '1' }, { rank: '2' }, { rank: '3' }],
'brand3': [{ rank: '1' }, { rank: '2' }, { rank: '3' }],
// ~10 more
};
第一个API调用会正确更新模型,但任何后续请求都会延迟一次。到底发生了什么事?有人能解释一下这个过程吗
工厂:
var _saveSelection = function (data) {
api.post('Distributor/UpdateSelection', data).then(function () {
api.get('Distributor/GetSelections').then(function (brands) {
angular.copy(_initial, _brands); //This is done to 'reset' the model.
for (var i = 0; i < brands.length; i++) {
_brands[brands[i].brand][brands[i].rank - 1] = brands[i];
}
deffered1.resolve(_brands);
});
});
return deffered1.promise;
};
var _getSelections = function () {
api.get('Distributor/GetSelections').then(function (brands) {
angular.copy(_initial, _brands); //again, I want to reset the model
for (var i = 0; i < brands.length; i++) {
_brands[brands[i].brand][brands[i].rank - 1] = brands[i];
}
deffered2.resolve(_brands);
});
return deffered2.promise;
};
return {
saveSelection: function (data) {
return _saveSelection(data);
},
getSelections: function () {
return _getSelections();
}
};
var\u saveSelection=函数(数据){
api.post('Distributor/UpdateSelection',data.),然后(函数(){
api.get('Distributor/GetSelections')。然后(函数(品牌){
angular.copy(_initial,_brands);//这样做是为了“重置”模型。
对于(变量i=0;i
问题是我在控制器中将对象复制到自身:
brandsService.saveSelection(data).then(
function (brand) {
angular.copy(brand, $scope.brand); //Here
$scope.closeDistributorSelection();
},
function () {
//handle error
});
我不知道工厂已经写信给我了。抱歉
固定代码:
brandsService.saveSelection(data).then(
function (brand) {
$scope.closeDistributorSelection();
},
function () {
//handle error
});