2015-01-15 9 views
0

Я работаю над приложением, которое использует angularjs. В этом случае у меня есть страница входа, которая ведет к домашней странице. Страница входа управляется loginCtrl, который далее использует loginService.Данные, проходящие между страницами angularjs

это loginctrl (Войти Controller)

'use strict'; 
angular.module('dreamflow').controller('LoginCtrl', ['$scope', 'LoginService', 
function($scope, LoginService) { 
    $scope.title = "Login"; 
    $scope.master = {} 

    $scope.login = function() { 
     var user = { 
      username: $scope.username, 
      password: $scope.password 
     }; 
     LoginService(user); 
    }; 

} 
]); 

это loginService

angular.module('dreamflow') 
.factory('LoginService', function($http, $location, $rootScope) { 
    return function(user) { 
     $http.post('/login',{ 
       username: user.username, 
       password: user.password 
      }).then(function(response) { 
      if (response.data.success) { 
       console.log(response.data); 
       $rootScope.user = response.data.user; 
       $location.url('/'); 
      } else { 
       console.log(response.data.errorMessage); 
       $location.url('/'); 
      } 
     }); 
    }; 
}); 

В приведенном выше коде информацию о пользователях приходит после проверки успешности ответа и затем мы перенаправлены на дому стр. Я хочу получить доступ к данным пользователя, входящим в $ rootScope.user в угловой контроллер домашней страницы.

+1

вы могли бы избежать использования rootScope при наличии LoginService в контроллере вашей домашней страницы. Тогда ваш контроллер домашней страницы будет иметь доступ немедленно к response.data.user по мере поступления данных. – PenguinSource

+0

Да, я пытался это сделать, но я не могу успешно получить доступ к данным пользователя. можете ли вы более подробно объяснить, как это сделать. – ashishkumar148

+0

Я также сталкиваюсь с той же проблемой. Контроллер не находится в одном приложении с угловым модулем, но они находятся в двух разных приложениях. – ritesh

ответ

1

Вы можете иметь службу, которая будет содержать имя пользователя и сервис будет введен в обоих контроллерах, как например:

jsfiddle with '$scope'

Кроме того, я считаю, что использование «это» вместо «$ рамки» полезно не смешивать области контроллера между собой, если вы используете более одного контроллера в одном и том же месте. Есть и другие причины.

HTML:

<div ng-app="myApp"> 

    <div ng-controller="ControllerOne as one"> 
     <h2>ControllerOne:</h2> 
     Change testService.loginName: <input type='text' ng-model='one.myService.loginName'/> </br></br> 
     myName: {{one.myService.loginName}} 
    </div> 
    <hr> 
    <div ng-controller="ControllerTwo as two"> 
     <h2>ControllerTwo:</h2> 
     myName: {{two.myService.loginName}} 
    </div> 

</div> 

JS:

app.service('testService', function(){ 
    this.loginName = "abcd"; 
}); 

app.controller('ControllerOne', function($scope, testService){ 
    this.myService = testService; 
}); 

app.controller('ControllerTwo', function($scope, testService){ 
    this.myService = testService; 
}); 

jsfiddle with 'this'

+0

Это не работает, поскольку контроллеры не находятся в одном приложении, а распространяются в двух разных приложениях. – ritesh

+0

Я не вижу 2 разных приложения, упомянутых в исходном вопросе; только 2 отдельных элементарных элемента, каждый со своим собственным контроллером @ritesh – PenguinSource

+0

correct..but вместо жестко заданных данных, таких как this.loginName = "abcd" Я хочу прочитать имя $ scope.username в сервисе и передать это. – ritesh

Смежные вопросы