使用Angular中的工厂刷新视图

时间:2014-10-17 16:03:36

标签: javascript angularjs angularjs-scope

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

我有一家工厂:

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
                    }
}
});

因此,当用户未登录时,该值为false。但是当用户登录时,会显示其用户名和名称。我遇到的问题是,当我刷新页面时,视图会更新,我可以看到用户已登录,但我不想刷新页面,我希望不同控制器上的两个视图立即更新。

向正确的方向推进?如果您需要我详细说明,请直接询问

谢谢

2 个答案:

答案 0 :(得分:0)

这可以通过$ watch实现。也许您应该重新组织代码,这样您就不需要手表了。这使得

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

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

}]);

希望它有所帮助!

答案 1 :(得分: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