2016-12-24 6 views
0

Я создаю спа-центр с угловой и тонкой каркасом. В соответствии с приведенным ниже кодом, что я пытаюсь сделать, контроллер страницы входа будет передавать данные контроллеру целевой страницы при успешном представлении пользователя/psw. Когда я помещаю завод за пределы функции http call/log in, он получает данные, но на заводе целевой страницы не доставляются данные. И когда я помещаю его внутри, он перестает работать. Пожалуйста, помогите мне ....завод не может передать данные другому контроллеру

этого завода для обмена данных между контроллерами

appDls.factory('sharedFactory', function() { 
    var dataTobeShared = {}; 
    var interface = {}; 
    interface.add = function (d) { 
     dataTobeShared = d; 
    } 
    interface.put = function() { 
     return dataTobeShared; 
    } 
    return interface; 
}); 

этот контроллером для главного перенаправления пользователя портала и портала оказывающего

appDls.controller('DlsappController', ['$scope', '$state', 'multipartForm', 'sharedFactory', '$window', function ($scope, $state, multipartForm, sharedFactory, $window) { 
    $scope.Userdata = []; 
    $scope.login = function() { 
     var url = "../scripts/routes.php/authen"; 
     multipartForm.post(url, $scope.login).then(function (d) { 
      $scope.Userdata.push(d.data[0]); 
      sharedFactory.add($scope.Userdata); 
      $window.location.href = '../portal/landing.php'; 
     }); 
    } 
}]); 

этот контроллер предназначен для маршрутизации целевой страницы

appDls.controller('landingController', ['$scope', '$state', 'multipartForm', 'sharedFactory', function ($scope, $state, multipartForm, sharedFactory) { 
    $scope.UserInfo = sharedFactory.put(); 
    $scope.$watch('UserInfo', function (newValue, oldValue) { 
     /*here we can use the user data from login page*/ 
     if (newValue.length == 1) { 
      alert(newValue[0].fullname); 
      $state.go(newValue[0].proftype); 
     } else { 
      alert("user not logged in successfully!"); 
      $state.go('default'); 
     } 

    }, true); 

}]); 
+1

Пожалуйста, отредактируйте свое сообщение, чтобы прекратить кричать - используя ВСЕ КАПСЫ, КАК ЭТО, грубо, почти везде. –

+0

Спасибо за комментарий ... Я редактировал вопрос .... –

ответ

0

Когда вы sharedFactory.add($scope.Userdata); ваш $scope.Userdata еще один объект, который не смотрел на landingController. Переопределяя dataToBeShared в функции sharedFactory.add, вы теряете ссылку на исходный объект, поэтому он больше не доступен из кода.

Чтобы landingController увидеть изменения, нужно либо переопределять sharedFactory.add функцию, чтобы передать значения в sharedFactory.dataTobeSharedмассива или использовать некоторые уведомления о событии на основе, а не $ смотреть.

Вот jsfiddle, чтобы проиллюстрировать мои слова.

0
appDls.factory('sharedFactory', function() { 
    var dataTobeShared = {}; 
return 
    { 
    add: function (d) { 
     dataTobeShared = d; 
    } 
    put: function() { 
     return dataTobeShared; 
    } 
    } 

}); 


appDls.controller('DlsappController', ['$scope', '$state', 'multipartForm', 'sharedFactory', '$window', function ($scope, $state, multipartForm, sharedFactory, $window) { 
    $scope.Userdata = []; 
    $scope.$watch('login',function() { 
     var url = "../scripts/routes.php/authen"; 
     multipartForm.post(url, $scope.login).then(function (d) { 
      $scope.Userdata.push(d.data[0]); 
      sharedFactory.add($scope.Userdata); 
      $window.location.href = '../portal/landing.php'; 
     }); 
    } 
}]); 


appDls.controller('landingController', ['$scope', '$state', 'multipartForm', 'sharedFactory', function ($scope, $state, multipartForm, sharedFactory) { 
    $scope.UserInfo = sharedFactory.put(); 
    $scope.$watch('UserInfo', function (newValue, oldValue) { 
     /*here we can use the user data from login page*/ 
     if (newValue.length == 1) { 
      alert(newValue[0].fullname); 
      $state.go(newValue[0].proftype); 
     } else { 
      alert("user not logged in successfully!"); 
      $state.go('default'); 
     } 

    }, true); 

}]); 
0

Наблюдатель должен получить значение с завода в каждом цикле дайджест и обновить переменную $ scope.

appDls.controller('landingController', ['$scope', '$state', 'multipartForm', 'sharedFactory', function ($scope, $state, multipartForm, sharedFactory) { 
    //$scope.UserInfo = sharedFactory.put(); 
    //$scope.$watch('UserInfo', function (newValue, oldValue) { 
    $scope.$watch(sharedFactory.put, function (newValue, oldValue) { 
     //UPDATE scope variable 
     $scope.UserInfo = newValue; 
      /*here we can use the user data from login page*/ 
     if (newValue.length == 1) { 
      alert(newValue[0].fullname); 
      $state.go(newValue[0].proftype); 
     } else { 
      alert("user not logged in successfully!"); 
      $state.go('default'); 
     } 

    }, true); 

}]); 

Исходный код только устанавливает переменную области видимости один раз при инициализации контроллера. Он должен получать значение с завода в каждом цикле дайджест.