从另一个控制器

时间:2017-02-01 07:22:04

标签: javascript angularjs cordova ionic-framework

我有一个侧面菜单及其控制器。在另一个控制器中,我获取用户数据并想要更新我的菜单项。怎么实现呢?我尝试使用$ 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
    })

如果您需要更多代码或详细信息,请与我联系。

修改

实际上我通过数据库表更新用户信息,从我们检索用户名和其他信息。因此菜单控制器每次都需要使用数据库中的当前值进行更新

5 个答案:

答案 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);
}])