Сохранение формы и состояния перезагрузки с помощью вкладок начальной загрузки

#angularjs #angular-ui-router

#angularjs #angular-ui-router

Вопрос:

Когда я отправляю форму для сохранения профиля пользователя, я хочу показать пользователю предупреждающее сообщение, чтобы показать, была ли запись успешно сохранена или нет. У меня есть 3 вкладки начальной загрузки, и форма, которую я хочу сохранить, находится на активной вкладке.

Я считаю, что предупреждение не отображается, потому $state что требуется перезагрузка. Я не уверен, как это сделать. Если бы эта страница была отдельным маршрутом, я, вероятно, мог бы сделать $state.reload() или что-то подобное. Я могу перейти на другую вкладку и обратно, и появится предупреждение.

Я пробовал: $state.transitionTo('myprofile', null, {reload: true, notify:true}); с этим не повезло.

HTML, отображающий предупреждение:

 <div ng-if="profilesaved == 'saved'" class="alert alert-success fade in">
    <a href="#" class="close" data-dismiss="alert" aria-label="close">amp;times;</a>
    <strong>Success!</strong> Your profile has been saved
</div>
  

Соответствующее состояние:

 .state('myprofile', {
    url: '/my-profile',
    templateUrl: 'pages/my-profile.html',
    controller: 'MyProfileController as myprofile',
    resolve: {
      // controller will not be loaded until $requireSignIn resolves
      "firebaseUser": ["$firebaseAuthService", function($firebaseAuthService) {
        // If the promise is rejected, it will throw a $stateChangeError
        return $firebaseAuthService.$requireSignIn();
      }]
    }           
})
  

Функция, которая устанавливает запись в БД.

 $scope.submit = function() {
    var record = firebase.database().ref().child('myprofile/' firebase.auth().currentUser.uid)
                 .set({
                        name: $scope.profile.name,
                        address: $scope.profile.address
                    }

                 ) 
                 .then(function(data) {
                    console.log('profile saved');
                    $scope.profilesaved = "saved";


                 })
                 .catch(function(error) {
                    console.log('profile save failed');
                    $scope.profilesaved = "save-failed";

                 });
};  
  

Ответ №1:

Не уверен, что это лучший способ решить эту проблему, но это сделало свое дело:

  .then(function(data) {
    console.log('profile saved');
    $scope.profilesaved = "saved";
    $scope.$apply();
    $timeout(function(){$state.reload();}, 4000);
 })