在控制器和登录/注销之间共享数据,ng-show / hide

时间:2015-11-06 14:36:12

标签: javascript angularjs

我被困在隐藏并在导航栏上显示登录和注销元素。简单登录页面和导航栏具有不同的控制器。因此,当有人登录login.html以隐藏另一个控制器所拥有的导航栏中的元素时,我认为我需要在控制器之间共享数据。另一个故事是我需要将cookie放到同一个变量中。 http://plnkr.co/edit/Mwhg3maL4XAIt3wLQhgn

.factory('Data', function(){

var data = { FirstName: '' }
return {
    getFirstName: function () {
        return data.FirstName;
    },
    setFirstName: function (myVar) {
        data.FirstName = myVar;
    }
};

})
.controller('HomeCtrl', function($scope, $cookies, Data){

 $scope.$watch(function () { return Data.getFirstName(); }, function (newValue, oldValue) {
    if (newValue !== oldValue) $scope.myVar = newValue;
});

//$scope.myVar = $cookies.get("Some");

})

.controller('LoginCtrl', function($scope, $rootScope, $cookies, Auth, $state, Data){
$scope.myVar = '';

$scope.$watch('myVar', function (newValue, oldValue) {
    if (newValue !== oldValue) Data.setFirstName(newValue);
});

$scope.login = function() {

Auth.$authWithPassword({email:$scope.email,password:$scope.password}).then(function(authData) {
  $scope.auth = true; //
      $scope.myVar =  true;
      $cookies.put('Some', true);
      $state.go('home');

})
}
})

1 个答案:

答案 0 :(得分:1)

我可能会使用角度事件解决这个问题

$scope.$emit('loggedIn', 'Some data perhaps?');

$scope.$on('loggedIn', function (event, data) {
  console.log(data); // 'Data to send'
});