我有此服务可以保持应用状态的最新状态。
'use strict';
angular.module('reportApp')
.service('Status', function Status() {
this.appStatus = {};
// Status
this.get = function(){
this.appStatus = {
menu:{
right:{
activeOption: 'datax'
},
left:{
}
},
section:{
selectedSection: null
}
};
return this.appStatus;
};
this.setActiveOptionRightMenu = function(menu){
this.appStatus.menu.right.activeOption = menu.id;
};
this.setActiveSection = function(section){
this.appStatus.section.selectedSection = section;
};
// ####################################
});
在我的主控制器中我有这个:
$scope.openRightMenu = function(menu){
Status.setActiveOptionRightMenu(menu);
$scope.menu = Status.get().menu;
};
$scope.menu = Status.get().menu;
当控制器在第一时刻加载时,它获得正确的默认值:
$scope.menu = Status.get().menu;
在第一时刻,我期待 activeOption:'datax',这是正确的。但是在事件发生后单击调用 openRightMenu 的视图时,视图不会更新新值。如果我在 setActiveOptionRightMenu 中放置一个断点,我可以看到设置的新值,但在此之后看起来会忽略新值并继续使用旧值。
答案 0 :(得分:0)
在你的get函数中,你将覆盖this.appStatus
:
// Status
this.get = function(){
this.appStatus = {
menu:{
right:{
activeOption: 'datax'
},
left:{
}
},
section:{
selectedSection: null
}
};
return this.appStatus;
};
这将始终返回this.appStatus的此对象,并将activeOption定义为' datax'。您应该使用get函数之外的默认值来定义它,或者检查它是否为null。
// Status
this.appStatus = {
menu:{
right:{
activeOption: 'datax'
},
left:{
}
},
section:{
selectedSection: null
}
};
this.get = function(){
return this.appStatus;
}