2014-10-17 38 views
0

我想在我的角度应用程序中更新两个视图,这两个视图都有自己的控制器。在Angular中的工厂刷新视图

我有一个工厂:

angular.module('starter') 
.factory('userFactory', function(DSCacheFactory){ 
    var user = DSCacheFactory.get("userData").get("user"); 
    if(user === undefined){ 

      return false 

    }else{ 
     var name, email 

      return {  
         name:user.name, 
         email: user.userName 
        } 
} 
}); 

所以在不登录的用户,该值是假的。但是当用户登录他们的用户名并显示名字时。我遇到的问题是,当我刷新页面时,视图被更新,我可以看到用户已登录,但是我不想刷新页面,我希望不同控制器上的两个视图立即更新。

任何推向正确的方向?如果你需要我细说什么,请你只问

谢谢

+0

您将需要更新用户一旦用户登录。可以你显示你的登录代码和'DSCacheFactory'? – 2014-10-17 16:10:09

回答

0

这可以用$表来实现。也许你应该重组你的代码,所以你不需要看。这使得

app.controller('myCtrl', ['userFactory', function(userFactory) { 

    $scope.$watch(
    function($scope) { return userFactory }, 
    function(user) { 
     if (!user) console.log('login please'); 
     else console.log(user); 
    } 
); 

}]);

希望它有帮助!

0

另一个想法。您可以在多个控制器上使用“appmodel”服务共享数据。

控制器:

angular.module('myApp.controllers', []) 
.controller('ACtrl', ['$scope', 'appmodel', 'loginservice', function($scope, appmodel, loginservice) { 
    $scope.User = appmodel.User; 
    $scope.login = loginservice.login; 
}]) 
.controller('BCtrl', ['$scope', 'appmodel', function($scope, appmodel) { 
    $scope.User = appmodel.User; 
}]) 

appmodel:

myApp.service('appmodel', [function(){ 
    var self = this; 

    self.User = {}; 
    self.User.name = ''; 

}]); 

登录操作:

myApp.service('loginservice', ['appmodel', 'userFactory', function(appmodel, userFactory){ 
    var self = this; 

    self.login = function() { 
    var user = userFactory; 

    if (user !== false) 
    { 
     appmodel.User.name = user.name; 
     appmodel.User.email = user.email; 
    } 
    } 
}]); 

更多细节:Full Demo