我有一个侧面菜单及其控制器。在另一个控制器中,我获取用户数据并想要更新我的菜单项。怎么实现呢?我尝试使用$ watch和服务,但没有成功。另外,我从未使用过$ rootScope,所以如果不是唯一的解决方案,请避免使用。
.controller('menuCtrl', function($scope) {
$scope.username = ""
})
.controller('afterloginCtrl', function($scope) {
var a = "this is username"
$scope.username = a // here I wish to update username in menuCtrl
})
如果您需要更多代码或详细信息,请与我联系。
修改
实际上我通过数据库表更新用户信息,从我们检索用户名和其他信息。因此菜单控制器每次都需要使用数据库中的当前值进行更新
答案 0 :(得分:1)
您可以使用某些服务在控制器之间共享数据 例如:
.service('currentUser', () => ({data: {}, someMethod: () => {}}))
.controller('Ctrl1', (currentUser, $scope) => {$scope.user = currentUser.data;})
.controller('Ctrl2', (currentUser) => {currentUser.data.name = 'username';});
显然,您也可以使用一些适当的方法扩展您的服务。等
然后你可以使用这些方法:
.controller('Ctrl2', (currentUser, api) => {
api.retrieveUser()
.then(user => currentUser.setData(user));
});
答案 1 :(得分:0)
.service('loginuser', () => ({}))
.controller('fistCtrl', (currentUser, $scope) => {
$scope.data1 = loginuser;
})
.controller('secondectrl', (loginuser) => {
loginuser.name = 'sessionname';
})
答案 2 :(得分:0)
如果您正在使用服务或工厂数据将在页面刷新后丢失。 您可以使用浏览器会话存储。
sessionStorage.setItem('NAME', "XYZ"); //set Data
sessionStorage.getItem('NAME'); // Get Data
//Afetr use you can clear data.
sessionStorage.clear();
答案 3 :(得分:0)
您可以使用localStorage
在第一个控制器中使用以下代码:
localStorage.setItem($scope.username);
和下一个控制器:
$scope.username = localStorage.getItem();
答案 4 :(得分:0)
根据上述评论,您的要求是在用户关闭应用并重新打开时保留用户名。因此,一旦应用重新加载或关闭,使用服务或工厂数据将会丢失。
解决方法:
您可以使用localStorage
存储用户名,也可以跨控制器访问数据。
代码:
您可以创建一个公共工厂服务,该服务将根据密钥保存并返回保存的本地存储数据。
app.factory('storageService', ['$rootScope', function($rootScope) {
return {
get: function(key) {
return localStorage.getItem(key);
},
set: function(key, data) {
localStorage.setItem(key, data);
}
};
}]);
在控制器中:
在控制器中注入storageService
依赖项,以设置并从本地存储中获取数据。
.controller('menuCtrl', ['$scope','storageService',function($scope,storageService) {
// Get local storage data from storageService
storageService.get('username');
}])
.controller('afterloginCtrl',['$scope','storageService',function($scope,storageService) {
var a = "this is username"
// Set local storage data to storageService
storageService.set('username', a);
}])